[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