Skip Menu |
Report information
Id: 130254
Status: resolved
Priority: 0/
Queue: perl5

Owner: Nobody
Requestors: ank_120630 <bitcard-120630 [at] kirpa.com>
Cc:
AdminCc:

Operating System: (no value)
PatchStatus: (no value)
Severity: low
Type: unknown
Perl Version: (no value)
Fixed In: 5.25.2



To: perlbug [...] perl.org
Date: Sun, 04 Dec 2016 02:30:45 +0200
From: "Alexander Kirpa" <bitcard-120630 [...] kirpa.com>
Subject: 5.24.1 - Memory leak in regexp
Download (untitled) / with headers
text/plain 10.9k
Download (untitled) / with headers
text/html 43.3k

Message body is not shown because it is too large.

RT-Send-CC: perl5-porters [...] perl.org
Sorry for unsuccessful content. Please see clear text below: ----- Huge memory leak in case not very clean regular expression used within cycle. Perl don't report any warnings or errors, but 'no warnings' pragma eliminates memory leak. Problem exists only in perl 5.24. Versions 5.20 and 5.22 do not have this problem. Please see below leak.pl, leak-report.sh, 20161204020211_leak_report.txt and perlbug -d output. Best regards, Alexander Kirpa -- cat leak.pl use strict; use warnings FATAL => 'all'; my $v=q{(\b)([a ])(?:13[;]12)3213(\b)}; #my $v=q{(\b)([a ])(?:13 12)3213(\b)}; my $v2=q{"$1$2aaaa$3"}; for (1..5) { my $t=$_; my $v1 = $v; if ($t % 2) { $v1 .= q{ }} #no warnings; $t =~ s{$v1}{$v2}gee; #use warnings FATAL => 'all'; } -- -- cat leak-report.sh t=$(date +'%Y%m%d%H%M%S') perl -MTest::LeakTrace::Script=-verbose leak.pl 2> $t'_leak_report.txt' -- -- cat 20161204020211_leak_report.txt leaked SCALAR(0x80203d498) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PV(0x80201bb70) at 0x80203d498 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x8022d3b00 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked ARRAY(0x80209ffd8) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PVAV(0x802ce3bb8) at 0x80209ffd8 REFCNT = 1 FLAGS = () ARRAY = 0x802ce2c40 FILL = 0 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = PV(0x802029230) at 0x80209f570 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x8022d3ba0 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 CUR = 149 LEN = 152 leaked ARRAY(0x80209ffa8) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PVAV(0x80203f0f0) at 0x80209ffa8 REFCNT = 1 FLAGS = () ARRAY = 0x802ce2b40 FILL = 0 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = PV(0x80201bbe0) at 0x80209ff30 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x8022d3a60 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 CUR = 149 LEN = 152 leaked SCALAR(0x80209ff30) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PV(0x80201bbe0) at 0x80209ff30 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x8022d3a60 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 CUR = 149 LEN = 152 leaked SCALAR(0x80209fe40) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PV(0x80201bc70) at 0x80209fe40 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x8022d3c40 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked ARRAY(0x80209fa80) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PVAV(0x80203f8e8) at 0x80209fa80 REFCNT = 1 FLAGS = () ARRAY = 0x802ce2be0 FILL = 0 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = PV(0x80201bb70) at 0x80203d498 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x8022d3b00 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked ARRAY(0x80209f630) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PVAV(0x80203f2d0) at 0x80209f630 REFCNT = 1 FLAGS = () ARRAY = 0x802ce2aa0 FILL = 0 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = PV(0x80201bb60) at 0x80209f5a0 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x8022d39c0 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked SCALAR(0x80209f5a0) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PV(0x80201bb60) at 0x80209f5a0 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x8022d39c0 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked SCALAR(0x80209f570) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PV(0x802029230) at 0x80209f570 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x8022d3ba0 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 CUR = 149 LEN = 152 leaked REGEXP(0x8020b4150) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = REGEXP(0x8020ae000) at 0x8020b4150 REFCNT = 1 FLAGS = () PV = 0x802c99370 "(?^:(\\b)([a ])(?:13[;]12)3213(\\b) )" CUR = 35 COMPFLAGS = 0x0 () EXTFLAGS = 0x610000 (NO_INPLACE_SUBST,USE_INTUIT_NOML,USE_INTUIT_ML) ENGINE = 0x801001de8 (STANDARD) INTFLAGS = 0x0 () NPARENS = 3 LASTPAREN = 0 LASTCLOSEPAREN = 0 MINLEN = 11 MINLENRET = 11 GOFS = 0 PRE_PREFIX = 4 SUBLEN = 0 SUBOFFSET = 0 SUBCOFFSET = 0 SUBBEG = 0x0 MOTHER_RE = 0x0 PAREN_NAMES = 0x0 SUBSTRS = 0x802042a00 PPRIVATE = 0x802c2d5c0 OFFS = 0x802c64500 QR_ANONCV = 0x0 SAVED_COPY = 0x0 leaked ARRAY(0x8020f8258) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PVAV(0x802ce3be0) at 0x8020f8258 REFCNT = 1 FLAGS = () ARRAY = 0x802ce2ca0 FILL = 0 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = PV(0x80201bc70) at 0x80209fe40 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x8022d3c40 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked SCALAR(0x8020f81f8) from leak.pl line 15. 14:#no warnings; 15: $t =~ s{$v1}{$v2}gee; 16:#use warnings FATAL => 'all'; SV = PVMG(0x8020725d0) at 0x8020f81f8 REFCNT = 1 FLAGS = (SMG,POK,pPOK,VALID,EVALED) PV = 0x80203e500 "13;123213 "\0 CUR = 10 LEN = 16 MAGIC = 0x802c99730 MG_VIRTUAL = &PL_vtbl_regexp MG_TYPE = PERL_MAGIC_bm(B) MG_LEN = 256 MG_PTR = 0x80204f600 "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\2\3\1\n\n\n\n\n\n\n\7\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" USEFUL = 100 -- --- Flags: category=core severity=low --- Site configuration information for perl 5.24.1: Configured by perl at Thu Oct 13 00:42:09 EEST 2016. Summary of my perl5 (revision 5 version 24 subversion 1) configuration: Platform: osname=freebsd, osvers=10.3-release, archname=amd64-freebsd-thread-multi uname='freebsd x8.homenet 10.3-release freebsd 10.3-release #1: tue may 17 01:32:48 eest 2016 ank0@x8-103.homenet:usrobjusrsrcsysx8 amd64 ' config_args='-sde -Dprefix=/usr/local -Dlibperl=libperl.so.5.24.1 -Darchlib=/usr/local/lib/perl5/5.24/mach -Dprivlib=/usr/local/lib/perl5/5.24 -Dman3dir=/usr/local/lib/perl5/5.24/perl/man/man3 -Dman1dir=/usr/local/lib/perl5/5.24/perl/man/man1 -Dsitearch=/usr/local/lib/perl5/site_perl/mach/5.24 -Dsitelib=/usr/local/lib/perl5/site_perl -Dscriptdir=/usr/local/bin -Dsiteman3dir=/usr/local/lib/perl5/site_perl/man/man3 -Dsiteman1dir=/usr/local/lib/perl5/site_perl/man/man1 -Ui_malloc -Ui_iconv -Uinstallusrbinperl -Dusenm=n -Dcc=/usr/local/bin/clang38 -Duseshrplib -Dinc_version_list=none -Dcf_by=perl -Dcf_email=perl@FreeBSD.org -Dcf_time=Thu Oct 13 00:42:09 EEST 2016 -Alddlflags=-L/usr/ports/obj/usr/ports/lang/perl5.24/work/perl-5.24.1-RC4 -L/usr/local/lib/perl5/5.24/mach/CORE -lperl -Dshrpldflags=$(LDDLFLAGS:N-L/usr/ports/obj/usr/ports/lang/perl5.24/work/perl-5.24.1-RC4:N-L/usr/local/lib/perl5/5.24/mach/CORE:N-lperl) -Wl,-soname,$(LIBPERL:R) -Doptimize=-O3 -pipe -msse3 -msse2 -msse -mmmx -msse4.1 -msse4.2 -march=native -fno-strict-aliasing -march=corei7 -fstack-protector -Ui_gdbm -Dusemultiplicity=y -Duse64bitint -Dusethreads=y -Dusemymalloc=n' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define use64bitint=define, use64bitall=define, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='/usr/local/bin/clang38', ccflags ='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_FORTIFY_SOURCE=2', optimize='-O3 -pipe -msse3 -msse2 -msse -mmmx -msse4.1 -msse4.2 -march=native -fno-strict-aliasing -march=corei7 -fstack-protector', cppflags='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include' ccversion='', gccversion='4.2.1 Compatible Clang 3.8.1 (tags/RELEASE_381/final)', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678, doublekind=3 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16, longdblkind=3 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='/usr/local/bin/clang38', ldflags ='-lpthread -Wl,-E -fstack-protector-strong -L/usr/local/lib' libpth=/usr/lib /usr/local/lib /usr/local/llvm38/bin/../lib/clang/3.8.1/lib /usr/lib libs=-lpthread -lm -lcrypt -lutil perllibs=-lpthread -lm -lcrypt -lutil libc=, so=so, useshrplib=true, libperl=libperl.so.5.24.1 gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' -Wl,-R/usr/local/lib/perl5/5.24/mach/CORE' cccdlflags='-DPIC -fPIC', lddlflags='-shared -L/usr/local/lib/perl5/5.24/mach/CORE -lperl -L/usr/local/lib -fstack-protector-strong' Locally applied patches: RC4 --- @INC for perl 5.24.1: /usr/local/lib/perl5/site_perl/mach/5.24 /usr/local/lib/perl5/site_perl /usr/local/lib/perl5/5.24/mach /usr/local/lib/perl5/5.24 --- Environment for perl 5.24.1: HOME=/root LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin PERL_BADLANG (unset) SHELL=/bin/csh ----
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 8.3k
On Sun, 04 Dec 2016 00:38:47 GMT, ank_120630 wrote: Show quoted text
> Sorry for unsuccessful content. > Please see clear text below: > ----- > Huge memory leak in case not very clean regular expression used within > cycle. > Perl don't report any warnings or errors, but 'no warnings' pragma > eliminates memory leak. > > > Problem exists only in perl 5.24. Versions 5.20 and 5.22 do not have > this problem. > > > Please see below leak.pl, leak-report.sh, > 20161204020211_leak_report.txt and perlbug -d output. > > > Best regards, > Alexander Kirpa > -- cat leak.pl > use strict; > use warnings FATAL => 'all'; > > > my $v=q{(\b)([a ])(?:13[;]12)3213(\b)}; > #my $v=q{(\b)([a ])(?:13 12)3213(\b)}; > > > my $v2=q{"$1$2aaaa$3"}; > > > for (1..5) > { > my $t=$_; > my $v1 = $v; > if ($t % 2) { $v1 .= q{ }} > #no warnings; > $t =~ s{$v1}{$v2}gee; > #use warnings FATAL => 'all'; > } > -- > -- cat leak-report.sh > t=$(date +'%Y%m%d%H%M%S') > perl -MTest::LeakTrace::Script=-verbose leak.pl 2> > $t'_leak_report.txt' > -- > -- cat 20161204020211_leak_report.txt > leaked SCALAR(0x80203d498) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PV(0x80201bb70) at 0x80203d498 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3b00 "Assuming NOT a POSIX class since a semi-colon was > found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a > ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked ARRAY(0x80209ffd8) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVAV(0x802ce3bb8) at 0x80209ffd8 > REFCNT = 1 > FLAGS = () > ARRAY = 0x802ce2c40 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Elt No. 0 > SV = PV(0x802029230) at 0x80209f570 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3ba0 "Assuming NOT a POSIX class since a semi-colon > was found instead of a colon in regex; marked by <-- HERE in > m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 > CUR = 149 > LEN = 152 > leaked ARRAY(0x80209ffa8) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVAV(0x80203f0f0) at 0x80209ffa8 > REFCNT = 1 > FLAGS = () > ARRAY = 0x802ce2b40 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Elt No. 0 > SV = PV(0x80201bbe0) at 0x80209ff30 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3a60 "Assuming NOT a POSIX class since a semi-colon > was found instead of a colon in regex; marked by <-- HERE in > m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 > CUR = 149 > LEN = 152 > leaked SCALAR(0x80209ff30) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PV(0x80201bbe0) at 0x80209ff30 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3a60 "Assuming NOT a POSIX class since a semi-colon was > found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a > ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 > CUR = 149 > LEN = 152 > leaked SCALAR(0x80209fe40) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PV(0x80201bc70) at 0x80209fe40 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3c40 "Assuming NOT a POSIX class since a semi-colon was > found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a > ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked ARRAY(0x80209fa80) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVAV(0x80203f8e8) at 0x80209fa80 > REFCNT = 1 > FLAGS = () > ARRAY = 0x802ce2be0 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Elt No. 0 > SV = PV(0x80201bb70) at 0x80203d498 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3b00 "Assuming NOT a POSIX class since a semi-colon > was found instead of a colon in regex; marked by <-- HERE in > m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked ARRAY(0x80209f630) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVAV(0x80203f2d0) at 0x80209f630 > REFCNT = 1 > FLAGS = () > ARRAY = 0x802ce2aa0 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Elt No. 0 > SV = PV(0x80201bb60) at 0x80209f5a0 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d39c0 "Assuming NOT a POSIX class since a semi-colon > was found instead of a colon in regex; marked by <-- HERE in > m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked SCALAR(0x80209f5a0) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PV(0x80201bb60) at 0x80209f5a0 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d39c0 "Assuming NOT a POSIX class since a semi-colon was > found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a > ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked SCALAR(0x80209f570) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PV(0x802029230) at 0x80209f570 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3ba0 "Assuming NOT a POSIX class since a semi-colon was > found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a > ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 > CUR = 149 > LEN = 152 > leaked REGEXP(0x8020b4150) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = REGEXP(0x8020ae000) at 0x8020b4150 > REFCNT = 1 > FLAGS = () > PV = 0x802c99370 "(?^:(\\b)([a ])(?:13[;]12)3213(\\b) )" > CUR = 35 > COMPFLAGS = 0x0 () > EXTFLAGS = 0x610000 (NO_INPLACE_SUBST,USE_INTUIT_NOML,USE_INTUIT_ML) > ENGINE = 0x801001de8 (STANDARD) > INTFLAGS = 0x0 () > NPARENS = 3 > LASTPAREN = 0 > LASTCLOSEPAREN = 0 > MINLEN = 11 > MINLENRET = 11 > GOFS = 0 > PRE_PREFIX = 4 > SUBLEN = 0 > SUBOFFSET = 0 > SUBCOFFSET = 0 > SUBBEG = 0x0 > MOTHER_RE = 0x0 > PAREN_NAMES = 0x0 > SUBSTRS = 0x802042a00 > PPRIVATE = 0x802c2d5c0 > OFFS = 0x802c64500 > QR_ANONCV = 0x0 > SAVED_COPY = 0x0 > leaked ARRAY(0x8020f8258) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVAV(0x802ce3be0) at 0x8020f8258 > REFCNT = 1 > FLAGS = () > ARRAY = 0x802ce2ca0 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Elt No. 0 > SV = PV(0x80201bc70) at 0x80209fe40 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3c40 "Assuming NOT a POSIX class since a semi-colon > was found instead of a colon in regex; marked by <-- HERE in > m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked SCALAR(0x8020f81f8) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVMG(0x8020725d0) at 0x8020f81f8 > REFCNT = 1 > FLAGS = (SMG,POK,pPOK,VALID,EVALED) > PV = 0x80203e500 "13;123213 "\0 > CUR = 10 > LEN = 16 > MAGIC = 0x802c99730 > MG_VIRTUAL = &PL_vtbl_regexp > MG_TYPE = PERL_MAGIC_bm(B) > MG_LEN = 256 > MG_PTR = 0x80204f600 > "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\2\3\1\n\n\n\n\n\n\n\7\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" > USEFUL = 100 > -- >
I ran your program with both "warnings" ('no warnings in block commented out) and without ('no warnings uncommented). I'm not very familiar with Test::LeakTrace::Script, but I note that when I uncommented 'no warnings' in the block, I did not eliminate *all* memory leaks. It appears that there remain a leaked SCALAR and a leaked REGEXP. Is that a concern? I'll attach the two different leak reports. Thank you very much. -- James E Keenan (jkeenan@cpan.org)
Subject: 20161204162549_warnings_leak_report.txt
leaked SCALAR(0x11c2178) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PV(0x11c2ef0) at 0x11c2178 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x11ed5b0 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked ARRAY(0x11d7418) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PVAV(0x11c3df8) at 0x11d7418 REFCNT = 1 FLAGS = () ARRAY = 0x11d06b0 FILL = 0 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = PV(0x11c2e80) at 0x11d7370 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x11e9c60 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked SCALAR(0x11d7370) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PV(0x11c2e80) at 0x11d7370 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x11e9c60 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked SCALAR(0x11d72c8) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PV(0x11c2f80) at 0x11d72c8 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x11e5840 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 CUR = 149 LEN = 152 leaked ARRAY(0x11e1dc8) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PVAV(0x11c3c18) at 0x11e1dc8 REFCNT = 1 FLAGS = () ARRAY = 0x120ba00 FILL = 0 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = PV(0x11c2f40) at 0x11e1d80 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x11e9a30 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 CUR = 149 LEN = 152 leaked ARRAY(0x11e1d98) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PVAV(0x11c4410) at 0x11e1d98 REFCNT = 1 FLAGS = () ARRAY = 0x11d1d00 FILL = 0 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = PV(0x11c2ef0) at 0x11c2178 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x11ed5b0 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked SCALAR(0x11e1d80) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PV(0x11c2f40) at 0x11e1d80 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x11e9a30 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 CUR = 149 LEN = 152 leaked SCALAR(0x11e1d20) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PV(0x11c2f20) at 0x11e1d20 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x1591fb0 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked ARRAY(0x1601550) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PVAV(0x15e8108) at 0x1601550 REFCNT = 1 FLAGS = () ARRAY = 0x11e9ad0 FILL = 0 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = PV(0x11c2f80) at 0x11d72c8 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x11e5840 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 CUR = 149 LEN = 152 leaked REGEXP(0x1601538) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = REGEXP(0x11e7a10) at 0x1601538 REFCNT = 1 FLAGS = () PV = 0x11e9b00 "(?^:(\\b)([a ])(?:13[;]12)3213(\\b) )" CUR = 35 COMPFLAGS = 0x0 () EXTFLAGS = 0x610000 (NO_INPLACE_SUBST,USE_INTUIT_NOML,USE_INTUIT_ML) ENGINE = 0x572a80 (STANDARD) INTFLAGS = 0x0 () NPARENS = 3 LASTPAREN = 0 LASTCLOSEPAREN = 0 MINLEN = 11 MINLENRET = 11 GOFS = 0 PRE_PREFIX = 4 SUBLEN = 0 SUBOFFSET = 0 SUBCOFFSET = 0 SUBBEG = 0x0 MOTHER_RE = 0x0 PAREN_NAMES = 0x0 SUBSTRS = 0x11e59c0 PPRIVATE = 0x11d05e0 OFFS = 0x11f2f70 QR_ANONCV = 0x0 SAVED_COPY = 0x0 leaked ARRAY(0x1601520) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PVAV(0x15e8130) at 0x1601520 REFCNT = 1 FLAGS = () ARRAY = 0x11e58e0 FILL = 0 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = PV(0x11c2f20) at 0x11e1d20 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x1591fb0 "Assuming NOT a POSIX class since a semi-colon was found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 CUR = 150 LEN = 152 leaked SCALAR(0x1601478) from leak.pl line 17. 16: #no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: #use warnings FATAL => 'all'; SV = PVMG(0x11e4280) at 0x1601478 REFCNT = 1 FLAGS = (SMG,POK,pPOK,VALID,EVALED) PV = 0x1592150 "13;123213 "\0 CUR = 10 LEN = 16 MAGIC = 0x11db1a0 MG_VIRTUAL = &PL_vtbl_regexp MG_TYPE = PERL_MAGIC_bm(B) MG_LEN = 256 MG_PTR = 0x1592280 "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\2\3\1\n\n\n\n\n\n\n\7\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" USEFUL = 100
Subject: 20161204162741_no_warnings_leak_report.txt
leaked SCALAR(0x23b7418) from leak.pl line 17. 16: no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: use warnings FATAL => 'all'; SV = PVMG(0x23c4280) at 0x23b7418 REFCNT = 1 FLAGS = (SMG,POK,pPOK,VALID,EVALED) PV = 0x23eb9a0 "13;123213 "\0 CUR = 10 LEN = 16 MAGIC = 0x23b05e0 MG_VIRTUAL = &PL_vtbl_regexp MG_TYPE = PERL_MAGIC_bm(B) MG_LEN = 256 MG_PTR = 0x23c59c0 "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\2\3\1\n\n\n\n\n\n\n\7\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" USEFUL = 100 leaked REGEXP(0x23b7370) from leak.pl line 17. 16: no warnings; 17: $t =~ s{$v1}{$v2}gee; 18: use warnings FATAL => 'all'; SV = REGEXP(0x23c7a10) at 0x23b7370 REFCNT = 1 FLAGS = () PV = 0x23c5b00 "(?^:(\\b)([a ])(?:13[;]12)3213(\\b) )" CUR = 35 COMPFLAGS = 0x0 () EXTFLAGS = 0x610000 (NO_INPLACE_SUBST,USE_INTUIT_NOML,USE_INTUIT_ML) ENGINE = 0x572a80 (STANDARD) INTFLAGS = 0x0 () NPARENS = 3 LASTPAREN = 0 LASTCLOSEPAREN = 0 MINLEN = 11 MINLENRET = 11 GOFS = 0 PRE_PREFIX = 4 SUBLEN = 0 SUBOFFSET = 0 SUBCOFFSET = 0 SUBBEG = 0x0 MOTHER_RE = 0x0 PAREN_NAMES = 0x0 SUBSTRS = 0x23cd5b0 PPRIVATE = 0x23c9c40 OFFS = 0x23eb9c0 QR_ANONCV = 0x0 SAVED_COPY = 0x0
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 582b
On Sun, 04 Dec 2016 00:38:47 GMT, ank_120630 wrote: Show quoted text
> Sorry for unsuccessful content. > Please see clear text below: > ----- > Huge memory leak in case not very clean regular expression used within > cycle. > Perl don't report any warnings or errors, but 'no warnings' pragma > eliminates memory leak. > > > Problem exists only in perl 5.24. Versions 5.20 and 5.22 do not have > this problem. >
List: Does anyone know how to use Porting/bisect.pl to identify the commit where the (additional) memory leakage occured? Thank you very much. -- James E Keenan (jkeenan@cpan.org)
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 12.4k
On Sun, 04 Dec 2016 00:38:47 GMT, ank_120630 wrote: Show quoted text
> Sorry for unsuccessful content. > Please see clear text below: > ----- > Huge memory leak in case not very clean regular expression used within > cycle. > Perl don't report any warnings or errors, but 'no warnings' pragma > eliminates memory leak. > > > Problem exists only in perl 5.24. Versions 5.20 and 5.22 do not have > this problem. > >
I built perl 5 blead and installed Test::LeakReport against it. ##### $ ./bin/perl -v | head -2 | tail -1 This is perl 5, version 25, subversion 8 (v5.25.8 (v5.25.7-50-g4f738c7)) built for x86_64-linux ##### $ cat my-leak-report.sh t=$(date +'%Y%m%d%H%M%S') BLEADPERL=/home/jkeenan/testing/blead/bin/perl $BLEADPERL -MTest::LeakTrace::Script=-verbose leak.pl 2> $t'_leak_report.txt' ##### sh my-leak-report.sh ##### When I expected the leak report (attached), I did not see the long (12 leakages) leak report than you and I got at 5.24.0 -- only a short (2 leadages) report. Is it possible that the problem has already been corrected? Thank you very much. Show quoted text
> Please see below leak.pl, leak-report.sh, > 20161204020211_leak_report.txt and perlbug -d output. > > > Best regards, > Alexander Kirpa > -- cat leak.pl > use strict; > use warnings FATAL => 'all'; > > > my $v=q{(\b)([a ])(?:13[;]12)3213(\b)}; > #my $v=q{(\b)([a ])(?:13 12)3213(\b)}; > > > my $v2=q{"$1$2aaaa$3"}; > > > for (1..5) > { > my $t=$_; > my $v1 = $v; > if ($t % 2) { $v1 .= q{ }} > #no warnings; > $t =~ s{$v1}{$v2}gee; > #use warnings FATAL => 'all'; > } > -- > -- cat leak-report.sh > t=$(date +'%Y%m%d%H%M%S') > perl -MTest::LeakTrace::Script=-verbose leak.pl 2> > $t'_leak_report.txt' > -- > -- cat 20161204020211_leak_report.txt > leaked SCALAR(0x80203d498) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PV(0x80201bb70) at 0x80203d498 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3b00 "Assuming NOT a POSIX class since a semi-colon was > found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a > ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked ARRAY(0x80209ffd8) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVAV(0x802ce3bb8) at 0x80209ffd8 > REFCNT = 1 > FLAGS = () > ARRAY = 0x802ce2c40 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Elt No. 0 > SV = PV(0x802029230) at 0x80209f570 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3ba0 "Assuming NOT a POSIX class since a semi-colon > was found instead of a colon in regex; marked by <-- HERE in > m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 > CUR = 149 > LEN = 152 > leaked ARRAY(0x80209ffa8) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVAV(0x80203f0f0) at 0x80209ffa8 > REFCNT = 1 > FLAGS = () > ARRAY = 0x802ce2b40 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Elt No. 0 > SV = PV(0x80201bbe0) at 0x80209ff30 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3a60 "Assuming NOT a POSIX class since a semi-colon > was found instead of a colon in regex; marked by <-- HERE in > m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 > CUR = 149 > LEN = 152 > leaked SCALAR(0x80209ff30) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PV(0x80201bbe0) at 0x80209ff30 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3a60 "Assuming NOT a POSIX class since a semi-colon was > found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a > ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 > CUR = 149 > LEN = 152 > leaked SCALAR(0x80209fe40) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PV(0x80201bc70) at 0x80209fe40 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3c40 "Assuming NOT a POSIX class since a semi-colon was > found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a > ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked ARRAY(0x80209fa80) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVAV(0x80203f8e8) at 0x80209fa80 > REFCNT = 1 > FLAGS = () > ARRAY = 0x802ce2be0 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Elt No. 0 > SV = PV(0x80201bb70) at 0x80203d498 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3b00 "Assuming NOT a POSIX class since a semi-colon > was found instead of a colon in regex; marked by <-- HERE in > m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked ARRAY(0x80209f630) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVAV(0x80203f2d0) at 0x80209f630 > REFCNT = 1 > FLAGS = () > ARRAY = 0x802ce2aa0 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Elt No. 0 > SV = PV(0x80201bb60) at 0x80209f5a0 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d39c0 "Assuming NOT a POSIX class since a semi-colon > was found instead of a colon in regex; marked by <-- HERE in > m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked SCALAR(0x80209f5a0) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PV(0x80201bb60) at 0x80209f5a0 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d39c0 "Assuming NOT a POSIX class since a semi-colon was > found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a > ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked SCALAR(0x80209f570) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PV(0x802029230) at 0x80209f570 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3ba0 "Assuming NOT a POSIX class since a semi-colon was > found instead of a colon in regex; marked by <-- HERE in m/(\\b)([a > ])(?:13[; <-- HERE ]12)3213(\\b)/"\0 > CUR = 149 > LEN = 152 > leaked REGEXP(0x8020b4150) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = REGEXP(0x8020ae000) at 0x8020b4150 > REFCNT = 1 > FLAGS = () > PV = 0x802c99370 "(?^:(\\b)([a ])(?:13[;]12)3213(\\b) )" > CUR = 35 > COMPFLAGS = 0x0 () > EXTFLAGS = 0x610000 (NO_INPLACE_SUBST,USE_INTUIT_NOML,USE_INTUIT_ML) > ENGINE = 0x801001de8 (STANDARD) > INTFLAGS = 0x0 () > NPARENS = 3 > LASTPAREN = 0 > LASTCLOSEPAREN = 0 > MINLEN = 11 > MINLENRET = 11 > GOFS = 0 > PRE_PREFIX = 4 > SUBLEN = 0 > SUBOFFSET = 0 > SUBCOFFSET = 0 > SUBBEG = 0x0 > MOTHER_RE = 0x0 > PAREN_NAMES = 0x0 > SUBSTRS = 0x802042a00 > PPRIVATE = 0x802c2d5c0 > OFFS = 0x802c64500 > QR_ANONCV = 0x0 > SAVED_COPY = 0x0 > leaked ARRAY(0x8020f8258) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVAV(0x802ce3be0) at 0x8020f8258 > REFCNT = 1 > FLAGS = () > ARRAY = 0x802ce2ca0 > FILL = 0 > MAX = 3 > ARYLEN = 0x0 > FLAGS = (REAL) > Elt No. 0 > SV = PV(0x80201bc70) at 0x80209fe40 > REFCNT = 1 > FLAGS = (POK,pPOK) > PV = 0x8022d3c40 "Assuming NOT a POSIX class since a semi-colon > was found instead of a colon in regex; marked by <-- HERE in > m/(\\b)([a ])(?:13[; <-- HERE ]12)3213(\\b) /"\0 > CUR = 150 > LEN = 152 > leaked SCALAR(0x8020f81f8) from leak.pl line 15. > 14:#no warnings; > 15: $t =~ s{$v1}{$v2}gee; > 16:#use warnings FATAL => 'all'; > SV = PVMG(0x8020725d0) at 0x8020f81f8 > REFCNT = 1 > FLAGS = (SMG,POK,pPOK,VALID,EVALED) > PV = 0x80203e500 "13;123213 "\0 > CUR = 10 > LEN = 16 > MAGIC = 0x802c99730 > MG_VIRTUAL = &PL_vtbl_regexp > MG_TYPE = PERL_MAGIC_bm(B) > MG_LEN = 256 > MG_PTR = 0x80204f600 > "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\2\3\1\n\n\n\n\n\n\n\7\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" > USEFUL = 100 > -- > > > --- > Flags: > category=core > severity=low > --- > Site configuration information for perl 5.24.1: > > > Configured by perl at Thu Oct 13 00:42:09 EEST 2016. > > > Summary of my perl5 (revision 5 version 24 subversion 1) > configuration: > > > Platform: > osname=freebsd, osvers=10.3-release, archname=amd64-freebsd-thread- > multi > uname='freebsd x8.homenet 10.3-release freebsd 10.3-release #1: tue > may 17 01:32:48 eest 2016 ank0@x8-103.homenet:usrobjusrsrcsysx8 amd64 > ' > config_args='-sde -Dprefix=/usr/local -Dlibperl=libperl.so.5.24.1 > -Darchlib=/usr/local/lib/perl5/5.24/mach > -Dprivlib=/usr/local/lib/perl5/5.24 > -Dman3dir=/usr/local/lib/perl5/5.24/perl/man/man3 > -Dman1dir=/usr/local/lib/perl5/5.24/perl/man/man1 > -Dsitearch=/usr/local/lib/perl5/site_perl/mach/5.24 > -Dsitelib=/usr/local/lib/perl5/site_perl -Dscriptdir=/usr/local/bin > -Dsiteman3dir=/usr/local/lib/perl5/site_perl/man/man3 > -Dsiteman1dir=/usr/local/lib/perl5/site_perl/man/man1 -Ui_malloc > -Ui_iconv -Uinstallusrbinperl -Dusenm=n -Dcc=/usr/local/bin/clang38 > -Duseshrplib -Dinc_version_list=none -Dcf_by=perl > -Dcf_email=perl@FreeBSD.org -Dcf_time=Thu Oct 13 00:42:09 EEST 2016 > -Alddlflags=-L/usr/ports/obj/usr/ports/lang/perl5.24/work/perl-5.24.1- > RC4 -L/usr/local/lib/perl5/5.24/mach/CORE -lperl > -Dshrpldflags=$(LDDLFLAGS:N- > L/usr/ports/obj/usr/ports/lang/perl5.24/work/perl-5.24.1-RC4:N- > L/usr/local/lib/perl5/5.24/mach/CORE:N-lperl) -Wl,-soname,$(LIBPERL:R) > -Doptimize=-O3 -pipe -msse3 -msse2 -msse -mmmx -msse4.1 -msse4.2 > -march=native -fno-strict-aliasing -march=corei7 -fstack-protector > -Ui_gdbm -Dusemultiplicity=y -Duse64bitint -Dusethreads=y > -Dusemymalloc=n' > hint=recommended, useposix=true, d_sigaction=define > useithreads=define, usemultiplicity=define > use64bitint=define, use64bitall=define, uselongdouble=undef > usemymalloc=n, bincompat5005=undef > Compiler: > cc='/usr/local/bin/clang38', ccflags ='-DHAS_FPSETMASK > -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -fstack-protector- > strong -I/usr/local/include -D_FORTIFY_SOURCE=2', > optimize='-O3 -pipe -msse3 -msse2 -msse -mmmx -msse4.1 -msse4.2 > -march=native -fno-strict-aliasing -march=corei7 -fstack-protector', > cppflags='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing > -pipe -fstack-protector-strong -I/usr/local/include' > ccversion='', gccversion='4.2.1 Compatible Clang 3.8.1 > (tags/RELEASE_381/final)', gccosandvers='' > intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678, > doublekind=3 > d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16, > longdblkind=3 > ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', > lseeksize=8 > alignbytes=8, prototype=define > Linker and Libraries: > ld='/usr/local/bin/clang38', ldflags ='-lpthread -Wl,-E -fstack- > protector-strong -L/usr/local/lib' > libpth=/usr/lib /usr/local/lib > /usr/local/llvm38/bin/../lib/clang/3.8.1/lib /usr/lib > libs=-lpthread -lm -lcrypt -lutil > perllibs=-lpthread -lm -lcrypt -lutil > libc=, so=so, useshrplib=true, libperl=libperl.so.5.24.1 > gnulibc_version='' > Dynamic Linking: > dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' -Wl,- > R/usr/local/lib/perl5/5.24/mach/CORE' > cccdlflags='-DPIC -fPIC', lddlflags='-shared > -L/usr/local/lib/perl5/5.24/mach/CORE -lperl -L/usr/local/lib -fstack- > protector-strong' > > > Locally applied patches: > RC4 > > > --- > @INC for perl 5.24.1: > /usr/local/lib/perl5/site_perl/mach/5.24 > /usr/local/lib/perl5/site_perl > /usr/local/lib/perl5/5.24/mach > /usr/local/lib/perl5/5.24 > > > --- > Environment for perl 5.24.1: > HOME=/root > LANG (unset) > LANGUAGE (unset) > LD_LIBRARY_PATH (unset) > LOGDIR (unset) > PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin > PERL_BADLANG (unset) > SHELL=/bin/csh > > ----
-- James E Keenan (jkeenan@cpan.org)
Subject: 20161204200849_leak_report.txt
leaked REGEXP(0x13b8d78) from leak.pl line 18. 17: # no warnings; 18: $t =~ s{$v1}{$v2}gee; 19: # use warnings FATAL => 'all'; SV = REGEXP(0x13be9d0) at 0x13b8d78 REFCNT = 1 FLAGS = () PV = 0x13c4620 "(?^:(\\b)([a ])(?:13[;]12)3213(\\b) )" CUR = 35 COMPFLAGS = 0x0 () EXTFLAGS = 0x610000 (NO_INPLACE_SUBST,USE_INTUIT_NOML,USE_INTUIT_ML) ENGINE = 0x57d580 (STANDARD) INTFLAGS = 0x0 () NPARENS = 3 LASTPAREN = 0 LASTCLOSEPAREN = 0 MINLEN = 11 MINLENRET = 11 GOFS = 0 PRE_PREFIX = 4 SUBLEN = 0 SUBOFFSET = 0 SUBCOFFSET = 0 SUBBEG = 0x0 MOTHER_RE = 0x0 PAREN_NAMES = 0x0 SUBSTRS = 0x13be330 PPRIVATE = 0x13a75f0 OFFS = 0x13c4550 QR_ANONCV = 0x0 SAVED_COPY = 0x0 leaked SCALAR(0x13b8d30) from leak.pl line 18. 17: # no warnings; 18: $t =~ s{$v1}{$v2}gee; 19: # use warnings FATAL => 'all'; SV = PVMG(0x13bb230) at 0x13b8d30 REFCNT = 1 FLAGS = (SMG,POK,IsCOW,pPOK) PV = 0x13bca80 "13;123213 "\0 CUR = 10 LEN = 16 COW_REFCNT = 0 MAGIC = 0x13be2f0 MG_VIRTUAL = &PL_vtbl_regexp MG_TYPE = PERL_MAGIC_bm(B) MG_LEN = 256 MG_PTR = 0x13c0990 "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\2\3\1\n\n\n\n\n\n\n\7\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" USEFUL = 100
CC: Perl5 Porteros <perl5-porters [...] perl.org>
Subject: Re: [perl #130254] 5.24.1 - Memory leak in regexp
Date: Mon, 5 Dec 2016 11:19:17 +0100
To: Perl RT Bug Tracker <perlbug-followup [...] perl.org>
From: demerphq <demerphq [...] gmail.com>
Download (untitled) / with headers
text/plain 1.4k
On 5 December 2016 at 02:14, James E Keenan via RT <perlbug-followup@perl.org> wrote: Show quoted text
> On Sun, 04 Dec 2016 00:38:47 GMT, ank_120630 wrote:
>> Sorry for unsuccessful content. >> Please see clear text below: >> ----- >> Huge memory leak in case not very clean regular expression used within >> cycle. >> Perl don't report any warnings or errors, but 'no warnings' pragma >> eliminates memory leak. >> >> >> Problem exists only in perl 5.24. Versions 5.20 and 5.22 do not have >> this problem. >> >>
> > I built perl 5 blead and installed Test::LeakReport against it. > > ##### > $ ./bin/perl -v | head -2 | tail -1 > This is perl 5, version 25, subversion 8 (v5.25.8 (v5.25.7-50-g4f738c7)) built for x86_64-linux > ##### > $ cat my-leak-report.sh > t=$(date +'%Y%m%d%H%M%S') > BLEADPERL=/home/jkeenan/testing/blead/bin/perl > $BLEADPERL -MTest::LeakTrace::Script=-verbose leak.pl 2> $t'_leak_report.txt' > ##### > sh my-leak-report.sh > ##### > > When I expected the leak report (attached), I did not see the long (12 leakages) leak report than you and I got at 5.24.0 -- only a short (2 leadages) report. > > Is it possible that the problem has already been corrected?
Yes. A patch I worked on with various others, including Karl was applied to fix this problem. As far as I know this was not a true "leak" as once the regex terminated the memory would be freed, but to a user it would manifest as one. What were other 2 leakages? Yves
To: Perl RT Bug Tracker <perlbug-followup [...] perl.org>
Date: Mon, 5 Dec 2016 11:20:31 +0100
From: demerphq <demerphq [...] gmail.com>
Subject: Re: [perl #130254] 5.24.1 - Memory leak in regexp
CC: Perl5 Porteros <perl5-porters [...] perl.org>
Download (untitled) / with headers
text/plain 1.9k
On 5 December 2016 at 11:19, demerphq <demerphq@gmail.com> wrote: Show quoted text
> On 5 December 2016 at 02:14, James E Keenan via RT > <perlbug-followup@perl.org> wrote:
>> On Sun, 04 Dec 2016 00:38:47 GMT, ank_120630 wrote:
>>> Sorry for unsuccessful content. >>> Please see clear text below: >>> ----- >>> Huge memory leak in case not very clean regular expression used within >>> cycle. >>> Perl don't report any warnings or errors, but 'no warnings' pragma >>> eliminates memory leak. >>> >>> >>> Problem exists only in perl 5.24. Versions 5.20 and 5.22 do not have >>> this problem. >>> >>>
>> >> I built perl 5 blead and installed Test::LeakReport against it. >> >> ##### >> $ ./bin/perl -v | head -2 | tail -1 >> This is perl 5, version 25, subversion 8 (v5.25.8 (v5.25.7-50-g4f738c7)) built for x86_64-linux >> ##### >> $ cat my-leak-report.sh >> t=$(date +'%Y%m%d%H%M%S') >> BLEADPERL=/home/jkeenan/testing/blead/bin/perl >> $BLEADPERL -MTest::LeakTrace::Script=-verbose leak.pl 2> $t'_leak_report.txt' >> ##### >> sh my-leak-report.sh >> ##### >> >> When I expected the leak report (attached), I did not see the long (12 leakages) leak report than you and I got at 5.24.0 -- only a short (2 leadages) report. >> >> Is it possible that the problem has already been corrected?
> > Yes. A patch I worked on with various others, including Karl was > applied to fix this problem.
Eg: commit 7eec73eb790f7c4982edfc28c17c011e8a072490 Author: Yves Orton <demerphq@gmail.com> Date: Fri Jun 10 12:20:20 2016 +0200 move warning text to RExC_state (via RExC_warn_text) This way we reuse the same AV each time, and avoid various refcount bookkeeping issues, all at a commit ee072c898947f5fee316f1381b29ad692addcf05 Author: Yves Orton <demerphq@gmail.com> Date: Wed Jun 8 18:42:30 2016 +0200 [perl #128313] Fix leak in perl 5.24 with strict and regex posix char classes This patch is a refinement of one written by Dan Collins. Any thanks for this patch should go to him. Yves -- perl -Mre=debug -e "/just|another|perl|hacker/"
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 1.9k
On Mon, 05 Dec 2016 02:19:53 -0800, demerphq wrote: Show quoted text
> On 5 December 2016 at 02:14, James E Keenan via RT > <perlbug-followup@perl.org> wrote:
> > On Sun, 04 Dec 2016 00:38:47 GMT, ank_120630 wrote:
> >> Sorry for unsuccessful content. > >> Please see clear text below: > >> ----- > >> Huge memory leak in case not very clean regular expression used > >> within > >> cycle. > >> Perl don't report any warnings or errors, but 'no warnings' pragma > >> eliminates memory leak. > >> > >> > >> Problem exists only in perl 5.24. Versions 5.20 and 5.22 do not have > >> this problem. > >> > >>
> > > > I built perl 5 blead and installed Test::LeakReport against it. > > > > ##### > > $ ./bin/perl -v | head -2 | tail -1 > > This is perl 5, version 25, subversion 8 (v5.25.8 (v5.25.7-50- > > g4f738c7)) built for x86_64-linux > > ##### > > $ cat my-leak-report.sh > > t=$(date +'%Y%m%d%H%M%S') > > BLEADPERL=/home/jkeenan/testing/blead/bin/perl > > $BLEADPERL -MTest::LeakTrace::Script=-verbose leak.pl 2> > > $t'_leak_report.txt' > > ##### > > sh my-leak-report.sh > > ##### > > > > When I expected the leak report (attached), I did not see the long > > (12 leakages) leak report than you and I got at 5.24.0 -- only a > > short (2 leadages) report.
5.24.0 and 5.24.1-RC4 report 12 leakages 5.25.7 - report 2 leakages Show quoted text
> > > > Is it possible that the problem has already been corrected?
> > Yes. A patch I worked on with various others, including Karl was > applied to fix this problem. > > As far as I know this was not a true "leak" as once the regex > terminated the memory would be freed, but to a user it would manifest > as one.
This is real "leak" - my task grow up to 7-8GB (500K lines * 50 regexp = 25M "not a true leak"). Current workarround (no warnings; use warnings FATAL => 'all';) solve problem, but I prefer see warnings. Show quoted text
> > What were other 2 leakages?
please see MG_VIRTUAL = &PL_vtbl_regexp mg_vtable.h:225 #define PL_vtbl_regexp PL_magic_vtables[want_vtbl_regexp] Show quoted text
> > Yves
Alexander Kirpa
From: Dave Mitchell <davem [...] iabyn.com>
To: Alexander Kirpa via RT <perlbug-followup [...] perl.org>
Date: Tue, 6 Dec 2016 10:46:29 +0000
Subject: Re: [perl #130254] 5.24.1 - Memory leak in regexp
CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 3.5k
On Mon, Dec 05, 2016 at 06:30:01PM -0800, Alexander Kirpa via RT wrote: Show quoted text
> On Mon, 05 Dec 2016 02:19:53 -0800, demerphq wrote:
> > On 5 December 2016 at 02:14, James E Keenan via RT > > <perlbug-followup@perl.org> wrote:
> > > On Sun, 04 Dec 2016 00:38:47 GMT, ank_120630 wrote:
> > >> Sorry for unsuccessful content. > > >> Please see clear text below: > > >> ----- > > >> Huge memory leak in case not very clean regular expression used > > >> within > > >> cycle. > > >> Perl don't report any warnings or errors, but 'no warnings' pragma > > >> eliminates memory leak. > > >> > > >> > > >> Problem exists only in perl 5.24. Versions 5.20 and 5.22 do not have > > >> this problem. > > >> > > >>
> > > > > > I built perl 5 blead and installed Test::LeakReport against it. > > > > > > ##### > > > $ ./bin/perl -v | head -2 | tail -1 > > > This is perl 5, version 25, subversion 8 (v5.25.8 (v5.25.7-50- > > > g4f738c7)) built for x86_64-linux > > > ##### > > > $ cat my-leak-report.sh > > > t=$(date +'%Y%m%d%H%M%S') > > > BLEADPERL=/home/jkeenan/testing/blead/bin/perl > > > $BLEADPERL -MTest::LeakTrace::Script=-verbose leak.pl 2> > > > $t'_leak_report.txt' > > > ##### > > > sh my-leak-report.sh > > > ##### > > > > > > When I expected the leak report (attached), I did not see the long > > > (12 leakages) leak report than you and I got at 5.24.0 -- only a > > > short (2 leadages) report.
> 5.24.0 and 5.24.1-RC4 report 12 leakages > 5.25.7 - report 2 leakages
> > > > > > Is it possible that the problem has already been corrected?
> > > > Yes. A patch I worked on with various others, including Karl was > > applied to fix this problem. > > > > As far as I know this was not a true "leak" as once the regex > > terminated the memory would be freed, but to a user it would manifest > > as one.
> This is real "leak" - my task grow up to 7-8GB (500K lines * 50 regexp = 25M "not a true leak"). > Current workarround (no warnings; use warnings FATAL => 'all';) solve problem, but I prefer see warnings.
I agree that if you replace the 'for (1..5)' with an infinite loop, then under 5.24.0 the process will grow without bounds. Under blead that leak has been fixed. Show quoted text
> > What were other 2 leakages?
> please see > MG_VIRTUAL = &PL_vtbl_regexp > mg_vtable.h:225 #define PL_vtbl_regexp PL_magic_vtables[want_vtbl_regexp]
I think Test::LeakTrace is wrong there. For a run-time pattern match, during the match, perl compiles the regex then attaches it to the patten match op. The REGEXP SV will only be freed when the code containing that op is freed, or when it's replaced by another regex. For example with: $ cat ~/tmp/p for (1..1) { my $pat = "a"; "a" =~ /$pat/; } $ perl5257t -Mblib -MTest::LeakTrace::Script=-verbose ~/tmp/p leaked REGEXP(0x1e11fb0) from /home/davem/tmp/p line 6. leaked SCALAR(0x1e320a0) from /home/davem/tmp/p line 6. leaked SCALAR(0x1e32070) from /home/davem/tmp/p line 6. change the loop to (1..5) and you get the same result. $ perl5257t -Mblib -MTest::LeakTrace::Script=-verbose ~/tmp/p leaked REGEXP(0xedffb0) from /home/davem/tmp/p line 6. leaked SCALAR(0xf000a0) from /home/davem/tmp/p line 6. leaked SCALAR(0xf00070) from /home/davem/tmp/p line 6. Change the loop to be infinite, and when run (without Test::LeakTrace), it shows no process growth. Put the pattern match in a string eval (so the match op is freed each time): eval q{"a" =~ /$pat/;}; and MTest::LeakTrace gives no output. -- I don't want to achieve immortality through my work... I want to achieve it through not dying. -- Woody Allen
Download (untitled) / with headers
text/plain 313b
Thank you for filing this report. You have helped make Perl better. With the release today of Perl 5.26.0, this and 210 other issues have been resolved. Perl 5.26.0 may be downloaded via: https://metacpan.org/release/XSAWYERX/perl-5.26.0 If you find that the problem persists, feel free to reopen this ticket.


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org