Do not leak with attribute on my variable

This commit is contained in:
Petr Písař 2012-09-21 10:03:38 +02:00
parent 1cfdf84744
commit f0eaa7691d
2 changed files with 86 additions and 1 deletions

View File

@ -0,0 +1,77 @@
From 13f27cb3dee86772eeed5d7d9b47746395ee603c Mon Sep 17 00:00:00 2001
From: Father Chrysostomos <sprout@cpan.org>
Date: Wed, 19 Sep 2012 21:53:51 -0700
Subject: [PATCH] Stop my vars with attrs from leaking
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Ported to 5.16.1:
commit 9fa29fa7929b4167c5491b792c5cc7e4365a2839
Author: Father Chrysostomos <sprout@cpan.org>
Date: Wed Sep 19 21:53:51 2012 -0700
[perl #114764] Stop my vars with attrs from leaking
S_apply_attrs was creating a SV containing a stash name, that was
later to be put in a const op, which would take care of freeing it.
But it didnt free it for a my variable, because the branch where that
const op was created didnt apply. So move the creation of that SV
inside the branch that uses it, otherwise it leaks. This leak was the
result of commit 95f0a2f1ffc6.
---
op.c | 4 ++--
t/op/svleak.t | 5 ++++-
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/op.c b/op.c
index 24d5ecb..017580d 100644
--- a/op.c
+++ b/op.c
@@ -2279,13 +2279,11 @@ STATIC void
S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
{
dVAR;
- SV *stashsv;
PERL_ARGS_ASSERT_APPLY_ATTRS;
/* fake up C<use attributes $pkg,$rv,@attrs> */
ENTER; /* need to protect against side-effects of 'use' */
- stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
#define ATTRSMODULE "attributes"
#define ATTRSMODULE_PM "attributes.pm"
@@ -2300,6 +2298,8 @@ S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
newSVpvs(ATTRSMODULE), NULL);
}
else {
+ SV * const stashsv =
+ stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
newSVpvs(ATTRSMODULE),
NULL,
diff --git a/t/op/svleak.t b/t/op/svleak.t
index df10953..6cfee2e 100644
--- a/t/op/svleak.t
+++ b/t/op/svleak.t
@@ -13,7 +13,7 @@ BEGIN {
or skip_all("XS::APItest not available");
}
-plan tests => 21;
+plan tests => 22;
# run some code N times. If the number of SVs at the end of loop N is
# greater than (N-1)*delta at the end of loop 1, we've got a leak
@@ -160,3 +160,6 @@ leak(2, 0,
}
leak(2,0,sub { !$^V }, '[perl #109762] version object in boolean context');
+
+# [perl #114764] Attributes leak scalars
+leak(2, 0, sub { eval 'my $x : shared' }, 'my $x :shared used to leak');
--
1.7.11.4

View File

@ -29,7 +29,7 @@
Name: perl
Version: %{perl_version}
# release number must be even higher, because dual-lived modules will be broken otherwise
Release: 237%{?dist}
Release: 238%{?dist}
Epoch: %{perl_epoch}
Summary: Practical Extraction and Report Language
Group: Development/Languages
@ -98,6 +98,9 @@ Patch14: perl-5.16.1-perl-113980-pp_syscall-I32-retval-truncates-the-retu
# podlators-2.4.1
Patch15: perl-5.14.2-Override-the-Pod-Simple-parse_file.patch
# Do not leak with attribute on my variable, rhbz#858966, RT#114764,
# fixed after 5.17.4
Patch16: perl-5.16.1-perl-114764-Stop-my-vars-with-attrs-from-leaking.patch
# Update some of the bundled modules
# see http://fedoraproject.org/wiki/Perl/perl.spec for instructions
@ -1358,6 +1361,7 @@ tarball from perl.org.
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
#copy the example script
cp -a %{SOURCE5} .
@ -1565,6 +1569,7 @@ pushd %{build_archlib}/CORE/
'Fedora Patch13: Clear $@ before "do" I/O error (RT#113730)' \
'Fedora Patch14: Do not truncate syscall() return value to 32 bits (RT#113980)' \
'Fedora Patch15: Override the Pod::Simple::parse_file (CPANRT#77530)' \
'Fedora Patch16: Do not leak with attribute on my variable (RT#114764)' \
%{nil}
rm patchlevel.bak
@ -2709,6 +2714,9 @@ sed \
# Old changelog entries are preserved in CVS.
%changelog
* Fri Sep 21 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-238
- Do not leak with attribute on my variable (bug #858966)
* Thu Sep 20 2012 Petr Pisar <ppisar@redhat.com> - 4:5.16.1-237
- Put perl-podlators into perl-core list (bug #856516)