Fix recreation of *::
This commit is contained in:
parent
4175dcd036
commit
de55dc7e45
|
@ -0,0 +1,79 @@
|
||||||
|
From 59ef97c7af81ab6faba749d88b558a55da41c249 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zefram <zefram@fysh.org>
|
||||||
|
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 <zefram@fysh.org>
|
||||||
|
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ř <ppisar@redhat.com>
|
||||||
|
---
|
||||||
|
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
|
||||||
|
|
|
@ -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
|
# 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
|
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
|
# 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
|
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
|
%patch70 -p1
|
||||||
%patch71 -p1
|
%patch71 -p1
|
||||||
%patch72 -p1
|
%patch72 -p1
|
||||||
|
%patch73 -p1
|
||||||
%patch200 -p1
|
%patch200 -p1
|
||||||
%patch201 -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 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 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 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 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' \
|
'Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux' \
|
||||||
%{nil}
|
%{nil}
|
||||||
|
@ -5293,6 +5298,7 @@ popd
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Jan 26 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-387
|
* Thu Jan 26 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-387
|
||||||
- Fix UTF-8 string handling in & operator (RT#129287)
|
- Fix UTF-8 string handling in & operator (RT#129287)
|
||||||
|
- Fix recreation of *:: (RT#129869)
|
||||||
|
|
||||||
* Fri Jan 20 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-386
|
* Fri Jan 20 2017 Petr Pisar <ppisar@redhat.com> - 4:5.24.1-386
|
||||||
- Fix a buffer overflow in split in scalar context (RT#130262)
|
- Fix a buffer overflow in split in scalar context (RT#130262)
|
||||||
|
|
Loading…
Reference in New Issue