From: Jarkko Hietaniemi Date: Thu, 14 Oct 1999 22:08:22 +0000 (+0000) Subject: Warn inside character classes about unknown backslash escapes X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=1028017ab8b9674cf749da3584eec9f032360d33;p=p5sagit%2Fp5-mst-13.2.git Warn inside character classes about unknown backslash escapes (that are not caught earlier because of being completely unknown, such as \m), such as \z (because they make do sense inside regexen, but not inside character classes). p4raw-id: //depot/cfgperl@4380 --- diff --git a/pod/perldelta.pod b/pod/perldelta.pod index b4d4d21..2ea9237 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1395,7 +1395,12 @@ your signed integers. See L. (W) You used a backslash-character combination which is not recognized by Perl. This combination appears in an interpolated variable or a -C<'>-delimited regular expression. +C<'>-delimited regular expression. The character was understood literally. + +=item /%s/: Unrecognized escape \\%c in character class passed through + +(W) You used a backslash-character combination which is not recognized +by Perl inside character classes. The character was understood literally. =item /%s/ should probably be written as "%s" @@ -1773,7 +1778,7 @@ subvert Perl's population of %ENV for nefarious purposes. =item Unrecognized escape \\%c passed through (W) You used a backslash-character combination which is not recognized -by Perl. +by Perl. The character was understood literally. =item Unterminated attribute parameter in attribute list diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 11758e0..a6a723c 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -110,7 +110,12 @@ your signed integers. See L. (W) You used a backslash-character combination which is not recognized by Perl. This combination appears in an interpolated variable or a -C<'>-delimited regular expression. +C<'>-delimited regular expression. The character was understood literally. + +=item /%s/: Unrecognized escape \\%c in character class passed through + +(W) You used a backslash-character combination which is not recognized +by Perl inside character classes. The character was understood literally. =item /%s/ should probably be written as "%s" diff --git a/regcomp.c b/regcomp.c index 0dafdd0..2a27b07 100644 --- a/regcomp.c +++ b/regcomp.c @@ -2061,9 +2061,9 @@ tryagain: default: if (!SIZE_ONLY && ckWARN(WARN_UNSAFE) && isALPHA(*p)) Perl_warner(aTHX_ WARN_UNSAFE, - "/%.127s/: Unrecognized escape \\%c passed through", - PL_regprecomp, - *p); + "/%.127s/: Unrecognized escape \\%c passed through", + PL_regprecomp, + *p); goto normal_default; } break; @@ -2364,6 +2364,13 @@ S_regclass(pTHX) value = scan_oct(--PL_regcomp_parse, 3, &numlen); PL_regcomp_parse += numlen; break; + default: + if (!SIZE_ONLY && ckWARN(WARN_UNSAFE) && isALPHA(value)) + Perl_warner(aTHX_ WARN_UNSAFE, + "/%.127s/: Unrecognized escape \\%c in character class passed through", + PL_regprecomp, + value); + break; } } if (namedclass > OOB_NAMEDCLASS) { @@ -2808,6 +2815,13 @@ S_regclassutf8(pTHX) value = scan_oct(--PL_regcomp_parse, 3, &numlen); PL_regcomp_parse += numlen; break; + default: + if (!SIZE_ONLY && ckWARN(WARN_UNSAFE) && isALPHA(value)) + Perl_warner(aTHX_ WARN_UNSAFE, + "/%.127s/: Unrecognized escape \\%c in character class passed through", + PL_regprecomp, + value); + break; } } if (namedclass > OOB_NAMEDCLASS) { diff --git a/t/pragma/warn/regcomp b/t/pragma/warn/regcomp index 8890962..92b8208 100644 --- a/t/pragma/warn/regcomp +++ b/t/pragma/warn/regcomp @@ -19,6 +19,10 @@ /%.127s/: false [] range \"%*.*s\" in regexp [S_regclassutf8] + /%.127s/: Unrecognized escape \\%c in character class passed through" [S_regclass] + + /%.127s/: Unrecognized escape \\%c in character class passed through" [S_regclassutf8] + __END__ # regcomp.c [S_regpiece] use warnings 'unsafe' ; @@ -40,8 +44,9 @@ Strange *+?{} on zero-length expression at - line 4. ######## # regcomp.c [S_regatom] use warnings 'unsafe' ; -$a =~ /\m/ ; +$a =~ /a\mb\b/ ; no warnings 'unsafe' ; +$a =~ /a\mb\b/ ; EXPECT Unrecognized escape \m passed through at - line 3. ######## @@ -139,3 +144,11 @@ EXPECT /[[:digit:]-b]/: false [] range "[:digit:]-" in regexp at - line 11. /[[:alpha:]-[:digit:]]/: false [] range "[:alpha:]-" in regexp at - line 12. /[[:digit:]-[:alpha:]]/: false [] range "[:digit:]-" in regexp at - line 13. +######## +# regcomp.c [S_regclass S_regclassutf8] +use warnings 'unsafe' ; +$a =~ /[a\zb]/ ; +no warnings 'unsafe' ; +$a =~ /[a\zb]/ ; +EXPECT +/[a\zb]/: Unrecognized escape \z in character class passed through at - line 3.