This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Another regexp charclass leak
authorFather Chrysostomos <sprout@cpan.org>
Wed, 7 Nov 2012 07:59:51 +0000 (23:59 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 9 Nov 2012 05:20:22 +0000 (21:20 -0800)
Compiling a negated character class can cause internal temporary sca-
lars to leak, as of v5.17.1-252-gea364ff.

(I don’t understand how v5.17.1-252-gea364ff caused it, but bisect
points to it.)

regcomp.c
t/op/svleak.t

index 9e48dcd..740bc94 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -13178,7 +13178,7 @@ parseit:
 
        av_store(av, 0, (HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION)
                        ? listsv
-                       : &PL_sv_undef);
+                       : (SvREFCNT_dec(listsv), &PL_sv_undef));
        if (swash) {
            av_store(av, 1, swash);
            SvREFCNT_dec(cp_list);
index 129bd0a..dda77ac 100644 (file)
@@ -15,7 +15,7 @@ BEGIN {
 
 use Config;
 
-plan tests => 56;
+plan tests => 57;
 
 # 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
@@ -175,6 +175,7 @@ leak(2, 0,
 
 eleak(2,0,'/[:]/');
 eleak(2,0,'/[\xdf]/i');
+eleak(2,0,'s![^/]!!');
 
 leak(2,0,sub { !$^V }, '[perl #109762] version object in boolean context');