Remove patches merged into code of 5.16.
This commit is contained in:
parent
2d8bd2eda5
commit
13e3016b98
@ -1,52 +0,0 @@
|
|||||||
From 7402016d87474403eea5c52dc2c071f68cbbe25c Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?=C3=86var=20Arnfj=C3=B6r=C3=B0=20Bjarmason?= <avar@cpan.org>
|
|
||||||
Date: Tue, 13 Dec 2011 14:43:12 +0000
|
|
||||||
Subject: [PATCH] [RT #78266] Don't leak memory when accessing named captures
|
|
||||||
that didn't match
|
|
||||||
|
|
||||||
Since 5.10 (probably 44a2ac759e) named captures have been leaking
|
|
||||||
memory when they're used, don't actually match, but are later
|
|
||||||
accessed. E.g.:
|
|
||||||
|
|
||||||
$ perl -wle 'for (1..10_000_000) { if ("foo" =~ /(foo|(?<capture>bar))?/) { my $capture = $+{capture} } } system "ps -o rss $$"'
|
|
||||||
RSS
|
|
||||||
238524
|
|
||||||
|
|
||||||
Here we match the "foo" branch of our regex, but since we've used a
|
|
||||||
name capture we'll end up running the code in
|
|
||||||
Perl_reg_named_buff_fetch, which allocates a newSVsv(&PL_sv_undef) but
|
|
||||||
never uses it unless it's trying to return an array.
|
|
||||||
|
|
||||||
Just change that code not to allocate scalars we don't plan to
|
|
||||||
return. With this fix we don't leak any memory since there's nothing
|
|
||||||
to leak anymore.
|
|
||||||
|
|
||||||
$ ./perl -Ilib -wle 'for (1..10_000_000) { if ("foo" =~ /(foo|(?<capture>bar))?/) { my $capture = $+{capture} } } system "ps -o rss $$"'
|
|
||||||
RSS
|
|
||||||
3528
|
|
||||||
|
|
||||||
This reverts commit b28f4af8cf94eb18c0cfde71e9625081912499a8 ("Fix
|
|
||||||
allocating something in the first place is a better solution than
|
|
||||||
allocating it, not using it, and then freeing it.
|
|
||||||
|
|
||||||
Petr Pisar: perldelta and wrong fix (commit b28f4af8cf) removed.
|
|
||||||
---
|
|
||||||
regcomp.c | 7 ++-----
|
|
||||||
|
|
||||||
diff --git a/regcomp.c b/regcomp.c
|
|
||||||
index 9e9fac4..56b2b9c 100644
|
|
||||||
--- a/regcomp.c
|
|
||||||
+++ b/regcomp.c
|
|
||||||
@@ -5409,7 +5409,8 @@ Perl_reg_named_buff_fetch(pTHX_ REGEXP * const r, SV * const namesv,
|
|
||||||
if (!retarray)
|
|
||||||
return ret;
|
|
||||||
} else {
|
|
||||||
- ret = newSVsv(&PL_sv_undef);
|
|
||||||
+ if (retarray)
|
|
||||||
+ ret = newSVsv(&PL_sv_undef);
|
|
||||||
}
|
|
||||||
if (retarray)
|
|
||||||
av_push(retarray, ret);
|
|
||||||
--
|
|
||||||
1.7.7.4
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
|||||||
From 38d7c791f597c3d567a70466dc2e48b73ec318bf Mon Sep 17 00:00:00 2001
|
|
||||||
From: Leon Timmermans <fawaka@gmail.com>
|
|
||||||
Date: Mon, 26 Dec 2011 19:06:54 +0200
|
|
||||||
Subject: [PATCH] Signal handlers must run before sigsuspend returns
|
|
||||||
|
|
||||||
The whole point of sigsuspend and pause is to wait until a signal has
|
|
||||||
arrived, and then return *after* it has been triggered. Currently
|
|
||||||
delayed/"safe" signals prevent that from happening, which might cause
|
|
||||||
race conditions.
|
|
||||||
|
|
||||||
This patch prevents that (as far as possible) by running the signal
|
|
||||||
handlers ASAP.
|
|
||||||
|
|
||||||
Petr Pisar: Back-ported to 5.14.2.
|
|
||||||
---
|
|
||||||
ext/POSIX/POSIX.xs | 4 ++++
|
|
||||||
1 files changed, 4 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs
|
|
||||||
index 8dc1f5a..4b9779b 100644
|
|
||||||
--- a/ext/POSIX/POSIX.xs
|
|
||||||
+++ b/ext/POSIX/POSIX.xs
|
|
||||||
@@ -1550,6 +1550,8 @@ sigaction(sig, optaction, oldaction = 0)
|
|
||||||
SysRet
|
|
||||||
sigpending(sigset)
|
|
||||||
POSIX::SigSet sigset
|
|
||||||
+ CLEANUP:
|
|
||||||
+ PERL_ASYNC_CHECK();
|
|
||||||
|
|
||||||
SysRet
|
|
||||||
sigprocmask(how, sigset, oldsigset = 0)
|
|
||||||
@@ -2019,6 +2021,8 @@ pathconf(filename, name)
|
|
||||||
|
|
||||||
SysRet
|
|
||||||
pause()
|
|
||||||
+ CLEANUP:
|
|
||||||
+ PERL_ASYNC_CHECK();
|
|
||||||
|
|
||||||
SysRet
|
|
||||||
setgid(gid)
|
|
||||||
--
|
|
||||||
1.7.7.6
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
|||||||
From 8ee4f541d4632a3615e70e177e004c5db970c8cd Mon Sep 17 00:00:00 2001
|
|
||||||
From: Father Chrysostomos <sprout@cpan.org>
|
|
||||||
Date: Fri, 3 Feb 2012 21:55:31 -0800
|
|
||||||
Subject: [PATCH] Stop !$^V from leaking
|
|
||||||
|
|
||||||
by mortalising the temporary SVs.
|
|
||||||
|
|
||||||
Petr Pisar: Back-port for 5.14.2.
|
|
||||||
---
|
|
||||||
t/op/svleak.t | 4 +++-
|
|
||||||
universal.c | 8 +++++++-
|
|
||||||
2 files changed, 10 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/t/op/svleak.t b/t/op/svleak.t
|
|
||||||
index 5eb090c..0f4348e 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 => 19;
|
|
||||||
+plan tests => 20;
|
|
||||||
|
|
||||||
# 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
|
|
||||||
@@ -141,3 +141,5 @@ leak(2, 0,
|
|
||||||
},
|
|
||||||
"rcatline leak"
|
|
||||||
);
|
|
||||||
+
|
|
||||||
+leak(2,0,sub { !$^V }, '[perl #109762] version object in boolean context');
|
|
||||||
diff --git a/universal.c b/universal.c
|
|
||||||
index 092ee80..9615d59 100644
|
|
||||||
--- a/universal.c
|
|
||||||
+++ b/universal.c
|
|
||||||
@@ -544,7 +544,13 @@ XS(XS_version_boolean)
|
|
||||||
SP -= items;
|
|
||||||
if (sv_derived_from(ST(0), "version") && SvROK(ST(0))) {
|
|
||||||
SV * const lobj = SvRV(ST(0));
|
|
||||||
- SV * const rs = newSViv( vcmp(lobj,new_version(newSVpvs("0"))) );
|
|
||||||
+ SV * const rs =
|
|
||||||
+ newSViv( vcmp(lobj,
|
|
||||||
+ sv_2mortal(new_version(
|
|
||||||
+ sv_2mortal(newSVpvs("0"))
|
|
||||||
+ ))
|
|
||||||
+ )
|
|
||||||
+ );
|
|
||||||
mPUSHs(rs);
|
|
||||||
PUTBACK;
|
|
||||||
return;
|
|
||||||
--
|
|
||||||
1.7.7.6
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
From be48bbe8d671b6841c3ec7cb734b98071afe3cd9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Chip <chip@pobox.com>
|
|
||||||
Date: Mon, 19 Sep 2011 23:51:49 -0700
|
|
||||||
Subject: [PATCH] add a couple missing LEAVEs in perlio_async_run()
|
|
||||||
|
|
||||||
---
|
|
||||||
perlio.c | 5 ++++-
|
|
||||||
1 files changed, 4 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/perlio.c b/perlio.c
|
|
||||||
index f0d67ae..79c6fdf 100644
|
|
||||||
--- a/perlio.c
|
|
||||||
+++ b/perlio.c
|
|
||||||
@@ -2563,8 +2563,10 @@ S_perlio_async_run(pTHX_ PerlIO* f) {
|
|
||||||
SAVEDESTRUCTOR_X(S_lockcnt_dec, (void*)f);
|
|
||||||
PerlIO_lockcnt(f)++;
|
|
||||||
PERL_ASYNC_CHECK();
|
|
||||||
- if ( !(PerlIOBase(f)->flags & PERLIO_F_CLEARED) )
|
|
||||||
+ if ( !(PerlIOBase(f)->flags & PERLIO_F_CLEARED) ) {
|
|
||||||
+ LEAVE;
|
|
||||||
return 0;
|
|
||||||
+ }
|
|
||||||
/* we've just run some perl-level code that could have done
|
|
||||||
* anything, including closing the file or clearing this layer.
|
|
||||||
* If so, free any lower layers that have already been
|
|
||||||
@@ -2576,6 +2578,7 @@ S_perlio_async_run(pTHX_ PerlIO* f) {
|
|
||||||
*f = l->next;
|
|
||||||
Safefree(l);
|
|
||||||
}
|
|
||||||
+ LEAVE;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
1.7.7.4
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
From dbcab24bb98b4a243c8330bc7017c2080832b3f9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
|
|
||||||
Date: Tue, 4 Oct 2011 13:46:39 +0200
|
|
||||||
Subject: [PATCH] Fix code injection in Digest
|
|
||||||
|
|
||||||
See <https://bugzilla.redhat.com/show_bug.cgi?id=743010> for more details.
|
|
||||||
---
|
|
||||||
cpan/Digest/Digest.pm | 4 +++-
|
|
||||||
1 files changed, 3 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/cpan/Digest/Digest.pm b/cpan/Digest/Digest.pm
|
|
||||||
index 384dfc8..4b923ae 100644
|
|
||||||
--- a/cpan/Digest/Digest.pm
|
|
||||||
+++ b/cpan/Digest/Digest.pm
|
|
||||||
@@ -35,7 +35,9 @@ sub new
|
|
||||||
($class, @args) = @$class if ref($class);
|
|
||||||
no strict 'refs';
|
|
||||||
unless (exists ${"$class\::"}{"VERSION"}) {
|
|
||||||
- eval "require $class";
|
|
||||||
+ my $pm_file = $class . ".pm";
|
|
||||||
+ $pm_file =~ s{::}{/}g;
|
|
||||||
+ eval { require $pm_file };
|
|
||||||
if ($@) {
|
|
||||||
$err ||= $@;
|
|
||||||
next;
|
|
||||||
--
|
|
||||||
1.7.6.4
|
|
||||||
|
|
@ -1,76 +0,0 @@
|
|||||||
From 647b6565b7d935eb9b92e057d0c7ae5fe54726e2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
|
|
||||||
Date: Thu, 6 Oct 2011 16:35:49 +0200
|
|
||||||
Subject: [PATCH] Don't segfault given string repeat count larger than 2^31
|
|
||||||
|
|
||||||
E.g., this overflows INT_MAX and overruns heap memory:
|
|
||||||
|
|
||||||
$ perl -le 'print "v"x(2**31+1)'
|
|
||||||
[Exit 139 (SEGV)]
|
|
||||||
|
|
||||||
(Perl_repeatcpy): Use the same type for "count" as our sole
|
|
||||||
callers in pp.c: IV (long), not I32 (int). Otherwise, passing
|
|
||||||
the wider value to a narrower "I32 count"
|
|
||||||
|
|
||||||
http://thread.gmane.org/gmane.comp.lang.perl.perl5.porters/96812
|
|
||||||
https://rt.perl.org/rt3/Ticket/Display.html?id=94560
|
|
||||||
|
|
||||||
Original author: Jim Meyering <meyering@redhat.com>
|
|
||||||
Petr Pisar: Modify embed.fnc instead of generated proto.h
|
|
||||||
---
|
|
||||||
embed.fnc | 2 +-
|
|
||||||
util.c | 8 ++++----
|
|
||||||
2 files changed, 5 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/embed.fnc b/embed.fnc
|
|
||||||
index bce167e..8c86a3e 100644
|
|
||||||
--- a/embed.fnc
|
|
||||||
+++ b/embed.fnc
|
|
||||||
@@ -1032,7 +1032,7 @@ EXp |SV*|reg_qr_package|NN REGEXP * const rx
|
|
||||||
|
|
||||||
: FIXME - why the E?
|
|
||||||
Ep |void |regprop |NULLOK const regexp *prog|NN SV* sv|NN const regnode* o
|
|
||||||
-Anp |void |repeatcpy |NN char* to|NN const char* from|I32 len|I32 count
|
|
||||||
+Anp |void |repeatcpy |NN char* to|NN const char* from|I32 len|IV count
|
|
||||||
AnpP |char* |rninstr |NN const char* big|NN const char* bigend \
|
|
||||||
|NN const char* little|NN const char* lend
|
|
||||||
Ap |Sighandler_t|rsignal |int i|Sighandler_t t
|
|
||||||
diff --git a/util.c b/util.c
|
|
||||||
index 0ea39c6..3d4dcc7 100644
|
|
||||||
--- a/util.c
|
|
||||||
+++ b/util.c
|
|
||||||
@@ -3315,7 +3315,7 @@ Perl_my_pclose(pTHX_ PerlIO *ptr)
|
|
||||||
|
|
||||||
#define PERL_REPEATCPY_LINEAR 4
|
|
||||||
void
|
|
||||||
-Perl_repeatcpy(register char *to, register const char *from, I32 len, register I32 count)
|
|
||||||
+Perl_repeatcpy(register char *to, register const char *from, I32 len, register IV count)
|
|
||||||
{
|
|
||||||
PERL_ARGS_ASSERT_REPEATCPY;
|
|
||||||
|
|
||||||
@@ -3323,19 +3323,19 @@ Perl_repeatcpy(register char *to, register const char *from, I32 len, register I
|
|
||||||
memset(to, *from, count);
|
|
||||||
else if (count) {
|
|
||||||
register char *p = to;
|
|
||||||
- I32 items, linear, half;
|
|
||||||
+ IV items, linear, half;
|
|
||||||
|
|
||||||
linear = count < PERL_REPEATCPY_LINEAR ? count : PERL_REPEATCPY_LINEAR;
|
|
||||||
for (items = 0; items < linear; ++items) {
|
|
||||||
register const char *q = from;
|
|
||||||
- I32 todo;
|
|
||||||
+ IV todo;
|
|
||||||
for (todo = len; todo > 0; todo--)
|
|
||||||
*p++ = *q++;
|
|
||||||
}
|
|
||||||
|
|
||||||
half = count / 2;
|
|
||||||
while (items <= half) {
|
|
||||||
- I32 size = items * len;
|
|
||||||
+ IV size = items * len;
|
|
||||||
memcpy(p, to, size);
|
|
||||||
p += size;
|
|
||||||
items *= 2;
|
|
||||||
--
|
|
||||||
1.7.6.4
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
|||||||
diff --git a/cpan/Unicode-Collate/Collate/Locale.pm b/cpan/Unicode-Collate/Collate/Locale.pm
|
|
||||||
index b26db00..35f4fb3 100644
|
|
||||||
--- a/cpan/Unicode-Collate/Collate/Locale.pm
|
|
||||||
+++ b/cpan/Unicode-Collate/Collate/Locale.pm
|
|
||||||
@@ -8,7 +8,6 @@ our $VERSION = '0.73';
|
|
||||||
|
|
||||||
use File::Spec;
|
|
||||||
|
|
||||||
-(my $ModPath = $INC{'Unicode/Collate/Locale.pm'}) =~ s/\.pm$//;
|
|
||||||
my $PL_EXT = '.pl';
|
|
||||||
|
|
||||||
my %LocaleFile = map { ($_, $_) } qw(
|
|
||||||
@@ -56,7 +55,12 @@ sub _fetchpl {
|
|
||||||
my $f = $LocaleFile{$accepted};
|
|
||||||
return if !$f;
|
|
||||||
$f .= $PL_EXT;
|
|
||||||
- my $path = File::Spec->catfile($ModPath, $f);
|
|
||||||
+ my $path;
|
|
||||||
+ for my $incpath (@INC) {
|
|
||||||
+ $path = File::Spec->catfile($incpath, 'Unicode', 'Collate', 'Locale', $f);
|
|
||||||
+ last if -f $path;
|
|
||||||
+ $path = undef;
|
|
||||||
+ }
|
|
||||||
my $h = do $path;
|
|
||||||
croak "Unicode/Collate/Locale/$f can't be found" if !$h;
|
|
||||||
return $h;
|
|
Loading…
Reference in New Issue
Block a user