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

Owner: Nobody
Requestors: slaven [at] rezic.de
Cc:
AdminCc:

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



CC: srezic [...] cpan.org
To: perlbug [...] perl.org
Date: Fri, 26 Jan 2018 21:35:47 +0100
From: slaven [...] rezic.de
Subject: Blead Breaks CPAN: TIMB/Geo-StreetAddress-US-1.04.tar.gz
Download (untitled) / with headers
text/plain 3.3k
This is a bug report for perl from slaven@rezic.de, generated with the help of perlbug 1.41 running under perl 5.27.8. ----------------------------------------------------------------- The Geo-StreetAddress-US-1.04 started to segfault while running the test suite: t/01_parser.t (Wstat: 139 Tests: 5 Failed: 0) Non-zero wait status: 139 On some (linux) systems it may be just an error message: Can't use an undefined value as a HASH reference Andreas bisected and found v5.27.5-166-ge839e6ed99 (which is RT #132385) and v5.27.5-203-g98d1c64ef9 as possible problem points. ----------------------------------------------------------------- --- Flags: category=core severity=low --- Site configuration information for perl 5.27.8: Configured by eserte at Sat Jan 20 09:22:10 CET 2018. Summary of my perl5 (revision 5 version 27 subversion 8) configuration: Platform: osname=linux osvers=3.16.0-4-amd64 archname=x86_64-linux uname='linux cabulja 3.16.0-4-amd64 #1 smp debian 3.16.51-3 (2017-12-13) x86_64 gnulinux ' config_args='-ds -e -Dprefix=/opt/perl-5.27.8 -Dusedevel -Dusemallocwrap=no -Dcf_email=srezic@cpan.org' hint=recommended useposix=true d_sigaction=define useithreads=undef usemultiplicity=undef use64bitint=define use64bitall=define uselongdouble=undef usemymalloc=n default_inc_excludes_dot=define bincompat5005=undef Compiler: cc='cc' ccflags ='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2' optimize='-O2' cppflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include' ccversion='' gccversion='4.9.2' 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='cc' ldflags =' -fstack-protector-strong -L/usr/local/lib' libpth=/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib libs=-lpthread -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc libc=libc-2.19.so so=so useshrplib=false libperl=libperl.a gnulibc_version='2.19' Dynamic Linking: dlsrc=dl_dlopen.xs dlext=so d_dlsymun=undef ccdlflags='-Wl,-E' cccdlflags='-fPIC' lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector-strong' --- @INC for perl 5.27.8: /opt/perl-5.27.8/lib/site_perl/5.27.8/x86_64-linux /opt/perl-5.27.8/lib/site_perl/5.27.8 /opt/perl-5.27.8/lib/5.27.8/x86_64-linux /opt/perl-5.27.8/lib/5.27.8 --- Environment for perl 5.27.8: HOME=/home/eserte LANG=en_US.UTF-8 LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/eserte/bin/linux-gnu:/home/eserte/bin/sh:/home/eserte/bin:/home/eserte/bin/pistachio-perl/bin:/usr/games:/home/eserte/devel PERLDOC=-MPod::Perldoc::ToTextOverstrike PERL_BADLANG (unset) SHELL=/bin/zsh
Subject: Re: [perl #132772] Blead Breaks CPAN: TIMB/Geo-StreetAddress-US-1.04.tar.gz
Date: Sat, 27 Jan 2018 14:51:05 +0000
From: Dave Mitchell <davem [...] iabyn.com>
To: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 627b
On Fri, Jan 26, 2018 at 12:36:12PM -0800, slaven@rezic.de wrote: Show quoted text
> The Geo-StreetAddress-US-1.04 started to segfault while running > the test suite: > > t/01_parser.t (Wstat: 139 Tests: 5 Failed: 0) > Non-zero wait status: 139
It reduces to this: my $a = "A"; my $s = "A"; $s =~ /$a(?{ $_."X" })/; It needs a run-time-compiled pattern with a code block which contains a multiconcat op. I'm looking further into this now. -- The crew of the Enterprise encounter an alien life form which is surprisingly neither humanoid nor made from pure energy. -- Things That Never Happen in "Star Trek" #22
To: perl5-porters [...] perl.org
Subject: Re: [perl #132772] Blead Breaks CPAN: TIMB/Geo-StreetAddress-US-1.04.tar.gz
Date: Tue, 20 Feb 2018 09:26:59 +0000
From: Dave Mitchell <davem [...] iabyn.com>
Download (untitled) / with headers
text/plain 2.2k
On Sat, Jan 27, 2018 at 02:51:05PM +0000, Dave Mitchell wrote: Show quoted text
> On Fri, Jan 26, 2018 at 12:36:12PM -0800, slaven@rezic.de wrote:
> > The Geo-StreetAddress-US-1.04 started to segfault while running > > the test suite: > > > > t/01_parser.t (Wstat: 139 Tests: 5 Failed: 0) > > Non-zero wait status: 139
> > It reduces to this: > > my $a = "A"; > my $s = "A"; > $s =~ /$a(?{ $_."X" })/; > > It needs a run-time-compiled pattern with a code block which contains > a multiconcat op. > > I'm looking further into this now.
Now fixed with: commit 8327fe931a244c33965f30d2ba4bbe7248016951 Author: David Mitchell <davem@iabyn.com> AuthorDate: Mon Feb 19 21:32:36 2018 +0000 Commit: David Mitchell <davem@iabyn.com> CommitDate: Mon Feb 19 22:06:49 2018 +0000 multiconcat: /$a(?{ $b . "c" })/ could crash RT #132772 Due to the weird order in which codeblocks within patterns are optimised, it was possible for the OP_CONCAT -> OP_MULTICONCAT optimisation to leave freed ops in the op execution chain, leading to assertion failures or crashes. In particular, optimize_optree() needs to always be called before CALL_PEEP(), otherwise the individual subtrees which make up the two children of a concat op may not have the head of subtree as the last op in the subtree's op_next chain: in the subtree RV2SV | GV this subtree gets peephole-optimised to ex-RV2SV | GVSV and GVSV->op_next no longer points to the ex-RV2SV but rather directly to RV2SV->op_next. But S_maybe_multiconcat() assumes that the head of each subtree is the last op to be executed: It updates RV2SV->op_next when reorganising the optree, but leaves GVSV->op_next possibly pointing at a freed op. This commit provides a minimal fix by unconditionally calling optimize_optree() on each code block in Perl_pmruntime(). This may mean that optimize_optree() may be run against the same code block again later, but apart from the slight inefficiency, this should be harmless. A more general fix will be applied post 5.28.0 release. -- Never work with children, animals, or actors.


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