diff --git a/perl-5.24.1-fix-special-case-recreation-of.patch b/perl-5.24.1-fix-special-case-recreation-of.patch new file mode 100644 index 0000000..4d28a8d --- /dev/null +++ b/perl-5.24.1-fix-special-case-recreation-of.patch @@ -0,0 +1,79 @@ +From 59ef97c7af81ab6faba749d88b558a55da41c249 Mon Sep 17 00:00:00 2001 +From: Zefram +Date: Sun, 22 Jan 2017 07:26:34 +0000 +Subject: [PATCH] fix special-case recreation of *:: +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Ported to 5.24.1: + +commit 120921acd4cf27bb932a725a8cf5c957652b22eb +Author: Zefram +Date: Sun Jan 22 07:26:34 2017 +0000 + + fix special-case recreation of *:: + + If *:: is called for then as a special case it is looked up as + $::{"main::"}. If $::{"main::"} has been deleted, then that hash entry + is recreated. But formerly it was only recreated as an undef scalar, + which broke things relying on glob lookup returning a glob. Now in + that special case the recreated hash entry is initialised as a glob, + and populated with the customary recursive reference to the main stash. + Fixes [perl #129869]. + +Signed-off-by: Petr Písař +--- + gv.c | 11 +++++++++-- + t/op/stash.t | 9 ++++++++- + 2 files changed, 17 insertions(+), 3 deletions(-) + +diff --git a/gv.c b/gv.c +index c89a3e7..3fda9b9 100644 +--- a/gv.c ++++ b/gv.c +@@ -1642,8 +1642,15 @@ S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name, + name_cursor++; + *name = name_cursor+1; + if (*name == name_end) { +- if (!*gv) +- *gv = MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE)); ++ if (!*gv) { ++ *gv = MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE)); ++ if (SvTYPE(*gv) != SVt_PVGV) { ++ gv_init_pvn(*gv, PL_defstash, "main::", 6, ++ GV_ADDMULTI); ++ GvHV(*gv) = ++ MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash)); ++ } ++ } + return TRUE; + } + } +diff --git a/t/op/stash.t b/t/op/stash.t +index 7ac379b..d6fded4 100644 +--- a/t/op/stash.t ++++ b/t/op/stash.t +@@ -7,7 +7,7 @@ BEGIN { + + BEGIN { require "./test.pl"; } + +-plan( tests => 54 ); ++plan( tests => 55 ); + + # Used to segfault (bug #15479) + fresh_perl_like( +@@ -355,3 +355,10 @@ is runperl( + ), + "ok\n", + "[perl #128238] non-stashes in stashes"; ++ ++is runperl( ++ prog => '%:: = (); print *{q|::|}, qq|\n|', ++ stderr => 1, ++ ), ++ "*main::main::\n", ++ "[perl #129869] lookup %:: by name after clearing %::"; +-- +2.7.4 + diff --git a/perl.spec b/perl.spec index 6e87222..beb6d6b 100644 --- a/perl.spec +++ b/perl.spec @@ -259,6 +259,9 @@ Patch71: perl-5.24.1-perl-129377-don-t-read-past-start-of-string-for-unma # Fix UTF-8 string handling in & operator, RT#129287, in upstream after 5.25.4 Patch72: perl-5.25.4-perl-129287-Make-UTF8-append-null.patch +# Fix recreation of *::, RT#129869, in upstream after 5.25.9 +Patch73: perl-5.24.1-fix-special-case-recreation-of.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 @@ -2955,6 +2958,7 @@ Perl extension for Version Objects %patch70 -p1 %patch71 -p1 %patch72 -p1 +%patch73 -p1 %patch200 -p1 %patch201 -p1 @@ -3015,6 +3019,7 @@ perl -x patchlevel.h \ 'Fedora Patch70: Fix a heap overflow if invalid octal or hexadecimal number is used in transliteration expression (RT#129342)' \ 'Fedora Patch71: Fix out-of-bound read in case of unmatched regexp backreference (RT#129377)' \ 'Fedora Patch72: Fix UTF-8 string handling in & operator (RT#129287)' \ + 'Fedora Patch73: Fix recreation of *:: (RT#129869)' \ '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} @@ -5293,6 +5298,7 @@ popd %changelog * Thu Jan 26 2017 Petr Pisar - 4:5.24.1-387 - Fix UTF-8 string handling in & operator (RT#129287) +- Fix recreation of *:: (RT#129869) * Fri Jan 20 2017 Petr Pisar - 4:5.24.1-386 - Fix a buffer overflow in split in scalar context (RT#130262)