From 85a4c68d184e67cf8b7c1ebad7d3efc13516d192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Mon, 19 Jun 2017 14:03:21 +0200 Subject: [PATCH] Fix spurious "Assuming NOT a POSIX class" warning --- ...522-Spurious-Assuming-NOT-a-POSIX-cl.patch | 135 ++++++++++++++++++ ...l-131522-and-fix-test-for-related-pe.patch | 39 +++++ perl.spec | 9 ++ 3 files changed, 183 insertions(+) create mode 100644 perl-5.27.0-Resolve-Perl-131522-Spurious-Assuming-NOT-a-POSIX-cl.patch create mode 100644 perl-5.27.0-add-test-for-perl-131522-and-fix-test-for-related-pe.patch diff --git a/perl-5.27.0-Resolve-Perl-131522-Spurious-Assuming-NOT-a-POSIX-cl.patch b/perl-5.27.0-Resolve-Perl-131522-Spurious-Assuming-NOT-a-POSIX-cl.patch new file mode 100644 index 0000000..8f05cc7 --- /dev/null +++ b/perl-5.27.0-Resolve-Perl-131522-Spurious-Assuming-NOT-a-POSIX-cl.patch @@ -0,0 +1,135 @@ +From bab0f8e933b383b6bef406d79c2da340bbcded33 Mon Sep 17 00:00:00 2001 +From: Yves Orton +Date: Sun, 18 Jun 2017 20:45:30 +0200 +Subject: [PATCH 1/2] Resolve Perl #131522: Spurious "Assuming NOT a POSIX + class" warning +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Petr Písař +--- + regcomp.c | 30 ++++++++++++++++++------------ + 1 file changed, 18 insertions(+), 12 deletions(-) + +diff --git a/regcomp.c b/regcomp.c +index 8921eed..0a4ea78 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -13991,6 +13991,13 @@ S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr) + REPORT_LOCATION_ARGS(p))); \ + } \ + } STMT_END ++#define CLEAR_POSIX_WARNINGS() \ ++ if (posix_warnings && RExC_warn_text) \ ++ av_clear(RExC_warn_text) ++ ++#define CLEAR_POSIX_WARNINGS_AND_RETURN(ret) \ ++ CLEAR_POSIX_WARNINGS(); \ ++ return ret + + STATIC int + S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, +@@ -14063,7 +14070,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + * + * The syntax for a legal posix class is: + * +- * qr/(?xa: \[ : \^? [:lower:]{4,6} : \] )/ ++ * qr/(?xa: \[ : \^? [[:lower:]]{4,6} : \] )/ + * + * What this routine considers syntactically to be an intended posix class + * is this (the comments indicate some restrictions that the pattern +@@ -14088,7 +14095,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + * # for it to be considered to be + * # an intended posix class. + * \h* +- * [:punct:]? # The closing class character, ++ * [[:punct:]]? # The closing class character, + * # possibly omitted. If not a colon + * # nor semi colon, the class name + * # must be even closer to a valid +@@ -14131,8 +14138,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + + PERL_ARGS_ASSERT_HANDLE_POSSIBLE_POSIX; + +- if (posix_warnings && RExC_warn_text) +- av_clear(RExC_warn_text); ++ CLEAR_POSIX_WARNINGS(); + + if (p >= e) { + return NOT_MEANT_TO_BE_A_POSIX_CLASS; +@@ -14224,7 +14230,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + *updated_parse_ptr = (char *) temp_ptr; + } + +- return OOB_NAMEDCLASS; ++ CLEAR_POSIX_WARNINGS_AND_RETURN(OOB_NAMEDCLASS); + } + } + +@@ -14294,7 +14300,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + /* We consider something like [^:^alnum:]] to not have been intended to + * be a posix class, but XXX maybe we should */ + if (complement) { +- return NOT_MEANT_TO_BE_A_POSIX_CLASS; ++ CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS); + } + + complement = 1; +@@ -14321,7 +14327,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + * this leaves this construct looking like [:] or [:^], which almost + * certainly weren't intended to be posix classes */ + if (has_opening_bracket) { +- return NOT_MEANT_TO_BE_A_POSIX_CLASS; ++ CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS); + } + + /* But this function can be called when we parse the colon for +@@ -14338,7 +14344,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + /* XXX We are currently very restrictive here, so this code doesn't + * consider the possibility that, say, /[alpha.]]/ was intended to + * be a posix class. */ +- return NOT_MEANT_TO_BE_A_POSIX_CLASS; ++ CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS); + } + + /* Here we have something like 'foo:]'. There was no initial colon, +@@ -14508,7 +14514,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + } + + /* Otherwise, it can't have meant to have been a class */ +- return NOT_MEANT_TO_BE_A_POSIX_CLASS; ++ CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS); + } + + /* If we ran off the end, and the final character was a punctuation +@@ -14558,7 +14564,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + * class name. (We can do this on the first pass, as any second pass + * will yield an even shorter name) */ + if (name_len < 3) { +- return NOT_MEANT_TO_BE_A_POSIX_CLASS; ++ CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS); + } + + /* Find which class it is. Initially switch on the length of the name. +@@ -14717,7 +14723,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + } + + /* Here neither pass found a close-enough class name */ +- return NOT_MEANT_TO_BE_A_POSIX_CLASS; ++ CLEAR_POSIX_WARNINGS_AND_RETURN(NOT_MEANT_TO_BE_A_POSIX_CLASS); + } + + probably_meant_to_be: +@@ -14759,7 +14765,7 @@ S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, + /* If it is a known class, return the class. The class number + * #defines are structured so each complement is +1 to the normal + * one */ +- return class_number + complement; ++ CLEAR_POSIX_WARNINGS_AND_RETURN(class_number + complement); + } + else if (! check_only) { + +-- +2.9.4 + diff --git a/perl-5.27.0-add-test-for-perl-131522-and-fix-test-for-related-pe.patch b/perl-5.27.0-add-test-for-perl-131522-and-fix-test-for-related-pe.patch new file mode 100644 index 0000000..7a465d9 --- /dev/null +++ b/perl-5.27.0-add-test-for-perl-131522-and-fix-test-for-related-pe.patch @@ -0,0 +1,39 @@ +From d730a80128abafff1e47e2506c23a8c1a06cfef4 Mon Sep 17 00:00:00 2001 +From: Yves Orton +Date: Sun, 18 Jun 2017 23:44:07 +0200 +Subject: [PATCH 2/2] add test for [perl #131522] and fix test for (related) + [perl #127581] +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Petr Písař +--- + t/re/reg_mesg.t | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/t/re/reg_mesg.t b/t/re/reg_mesg.t +index 090eccb..a0b78c4 100644 +--- a/t/re/reg_mesg.t ++++ b/t/re/reg_mesg.t +@@ -221,7 +221,6 @@ my @death = + '/(?[[[::]]])/' => "Syntax error in (?[...]) in regex m/(?[[[::]]])/", + '/(?[[[:w:]]])/' => "Syntax error in (?[...]) in regex m/(?[[[:w:]]])/", + '/(?[[:w:]])/' => "", +- '/[][[:alpha:]]' => "", # [perl #127581] + '/([.].*)[.]/' => "", # [perl #127582] + '/[.].*[.]/' => "", # [perl #127604] + '/(?[a])/' => 'Unexpected character {#} m/(?[a{#}])/', +@@ -587,7 +586,8 @@ my @warning = ( + 'Assuming NOT a POSIX class since a semi-colon was found instead of a colon {#} m/[foo;{#}punct;]]\x{100}/', + 'Assuming NOT a POSIX class since a semi-colon was found instead of a colon {#} m/[foo;punct;]{#}]\x{100}/', + ], +- ++ '/[][[:alpha:]]/' => "", # [perl #127581] ++ '/[][[:alpha:]\\@\\\\^_?]/' => "", # [perl #131522] + ); # See comments before this for why '\x{100}' is generally needed + + # These need the character 'ネ' as a marker for mark_as_utf8() +-- +2.9.4 + diff --git a/perl.spec b/perl.spec index 8938e4c..fcf0d3e 100644 --- a/perl.spec +++ b/perl.spec @@ -169,6 +169,11 @@ Patch38: perl-5.27.0-perl-129183-don-t-treat-as-an-escape-in-PATH-for-S.p # RT#131575, in upstream after 5.27.0 Patch39: perl-5.26.0-don-t-call-Perl_fbm_instr-with-negative-length.patch +# Fix spurious "Assuming NOT a POSIX class" warning, RT#131522, +# in upsteam after 5.27.0 +Patch40: perl-5.27.0-Resolve-Perl-131522-Spurious-Assuming-NOT-a-POSIX-cl.patch +Patch41: perl-5.27.0-add-test-for-perl-131522-and-fix-test-for-related-pe.patch + # Link XS modules to libperl.so with EU::CBuilder on Linux, bug #960048 Patch200: perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch @@ -2826,6 +2831,8 @@ Perl extension for Version Objects %patch37 -p1 %patch38 -p1 %patch39 -p1 +%patch40 -p1 +%patch41 -p1 %patch200 -p1 %patch201 -p1 @@ -2854,6 +2861,7 @@ perl -x patchlevel.h \ 'Fedora Patch37: Fix a buffer overflow in my_atof2() (RT#131526)' \ 'Fedora Patch38: Fix handling backslashes in PATH environment variable when executing "perl -S" (RT#129183)' \ 'Fedora Patch39: Fix a conditional jump on uninitilized memory in re_intuit_start() (RT#131575)' \ + 'Fedora Patch40: Fix spurious "Assuming NOT a POSIX class" warning (RT#131522)' \ 'Fedora Patch200: Link XS modules to libperl.so with EU::CBuilder on Linux' \ 'Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux' \ %{nil} @@ -5146,6 +5154,7 @@ popd - Fix handling backslashes in PATH environment variable when executing "perl -S" (RT#129183) - Fix a conditional jump on uninitilized memory in re_intuit_start() (RT#131575) +- Fix spurious "Assuming NOT a POSIX class" warning (RT#131522) * Tue Jun 06 2017 Jitka Plesnikova - 4:5.26.0-393 - Stop providing old perl(MODULE_COMPAT_5.24.*)