diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/diagnostics.pm | 8 | ||||
-rw-r--r-- | lib/diagnostics.t | 9 |
2 files changed, 12 insertions, 5 deletions
diff --git a/lib/diagnostics.pm b/lib/diagnostics.pm index f2d542927a..60c96ea3ce 100644 --- a/lib/diagnostics.pm +++ b/lib/diagnostics.pm @@ -410,22 +410,22 @@ my %msg; # Since we strip "\.\n" when we search a warning, strip it here as well $header =~ s/\.?$//; - my @toks = split( /(%l?[dx]|%c|%(?:\.\d+)?[fs])/, $header ); + my @toks = split( /(%l?[dx]|%u|%c|%(?:\.\d+)?[fs])/, $header ); if (@toks > 1) { my $conlen = 0; for my $i (0..$#toks){ if( $i % 2 ){ if( $toks[$i] eq '%c' ){ $toks[$i] = '.'; - } elsif( $toks[$i] eq '%d' ){ + } elsif( $toks[$i] =~ /^%(?:d|u)$/ ){ $toks[$i] = '\d+'; } elsif( $toks[$i] =~ '^%(?:s|.*f)$' ){ $toks[$i] = $i == $#toks ? '.*' : '.*?'; } elsif( $toks[$i] =~ '%.(\d+)s' ){ $toks[$i] = ".{$1}"; - } elsif( $toks[$i] =~ '^%l*x$' ){ + } elsif( $toks[$i] =~ '^%l*x$' ){ $toks[$i] = '[\da-f]+'; - } + } } elsif( length( $toks[$i] ) ){ $toks[$i] = quotemeta $toks[$i]; $conlen += length( $toks[$i] ); diff --git a/lib/diagnostics.t b/lib/diagnostics.t index b5db34de74..31a5802c2b 100644 --- a/lib/diagnostics.t +++ b/lib/diagnostics.t @@ -5,7 +5,7 @@ BEGIN { @INC = 'lib'; } -use Test::More tests => 8; +use Test::More tests => 9; BEGIN { my $w; @@ -54,3 +54,10 @@ seek STDERR, 0,0; $warning = ''; warn "Execution of -e aborted due to compilation errors.\n"; like $warning, qr/The final summary message/, 'Periods at end of line'; + + +# Test for %d/%u +seek STDERR, 0,0; +$warning = ''; +warn "Bad arg length for us, is 4, should be 42"; +like $warning, qr/In C parlance/, '%u works'; |