[SCM] Git repository for devscripts branch, master, updated. v2.12.4-43-g227b8b8

Benjamin Drung bdrung at debian.org
Thu Oct 25 20:17:07 UTC 2012


The following commit has been merged in the master branch:
commit 0f5472b56a7d181ec889039b6f7fc88552cd6960
Author: Raphael Geissert <geissert at debian.org>
Date:   Sun Oct 21 13:17:04 2012 -0500

    checkbashisms: multiple fixes to heredoc handling for convoluted code
    
    Signed-off-by: Benjamin Drung <bdrung at debian.org>

diff --git a/scripts/checkbashisms.pl b/scripts/checkbashisms.pl
index ecd64f1..8f9b19c 100755
--- a/scripts/checkbashisms.pl
+++ b/scripts/checkbashisms.pl
@@ -433,10 +433,23 @@ foreach my $filename (@ARGV) {
 
 	    # Only look for the beginning of a heredoc here, after we've
 	    # stripped out quoted material, to avoid false positives.
-	    if ($cat_line =~ m/(?:^|[^<])\<\<(\-?)\s*(?:[\\]?([\w-]+)|[\'\"](.*?)[\'\"])/) {
+	    if ($cat_line =~ m/(?:^|[^<])\<\<(\-?)\s*(?:(?!<|'|")((?:[^\s;]+(?:(?<=\\)[\s;])?)+)|[\'\"](.*?)[\'\"])/) {
 		$cat_indented = ($1 && $1 eq '-')? 1 : 0;
-		$cat_string = $2;
-		$cat_string = $3 if not defined $cat_string;
+		my $quoted = defined($3);
+		$cat_string = $quoted? $3 : $2;
+		unless ($quoted) {
+		    # Now strip backslashes. Keep the position of the
+		    # last match in a variable, as s/// resets it back
+		    # to undef, but we don't want that.
+		    my $pos = 0;
+		    pos($cat_string) = $pos;
+		    while ($cat_string =~ s/\G(.*?)\\/$1/) {
+			# postition += length of match + the character
+			# that followed the backslash:
+			$pos += length($1)+1;
+			pos($cat_string) = $pos;
+		    }
+		}
 		$start_lines{'cat_string'} = $.;
             }
 	}

-- 
Git repository for devscripts



More information about the devscripts-devel mailing list