This is a bug report for perl from frank....@gmail.com,
generated with the help of perlbug 1.39 running under perl 5.10.1.
-----------------------------------------------------------------
% perl -e 'eval { $::{"@"}="" }'
zsh: segmentation fault perl -e 'eval { $::{"@"}="" }'
This is still broken in 5.11.2.
git bisect says:
commit e654831bf5852e58816193ed94d40e2031346fa6
Author: Nicholas Clark <ni...@ccl4.org>
Date: Sat Jan 28 14:02:10 2006 +0000
PERL_DONT_CREATE_GVSV wasn't as effective as it should have been.
p4raw-id: //depot/perl@26980
Bye, Frank
-----------------------------------------------------------------
---
Flags:
category=core
severity=low
---
Site configuration information for perl 5.10.1:
Configured by Debian Project at Sat Nov 7 22:18:45 UTC 2009.
Summary of my perl5 (revision 5 version 10 subversion 1) configuration:
Platform:
osname=linux, osvers=2.6.31.5-dsa-amd64, archname=x86_64-linux-gnu-thread-multi
uname='linux brahms 2.6.31.5-dsa-amd64 #1 smp fri oct 23 12:25:24 cest 2009 x86_64 gnulinux '
config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.10.1 -Dsitearch=/usr/local/lib/perl/5.10.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.10.1 -Dd_dosuid -des'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=define, use64bitall=define, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2 -g',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.3.4', gccosandvers=''
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
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 -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64
libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
perllibs=-ldl -lm -lpthread -lc -lcrypt
libc=/lib/libc-2.10.1.so, so=so, useshrplib=true, libperl=libperl.so.5.10.1
gnulibc_version='2.10.1'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector'
Locally applied patches:
---
@INC for perl 5.10.1:
/etc/perl
/usr/local/lib/perl/5.10.1
/usr/local/share/perl/5.10.1
/usr/lib/perl5
/usr/share/perl5
/usr/lib/perl/5.10
/usr/share/perl/5.10
/usr/local/lib/site_perl
.
---
Environment for perl 5.10.1:
HOME=/home/fw
LANG=de_DE.UTF-8
LANGUAGE=
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/sbin:/usr/sbin:/home/fw/bin:/home/fw/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
PERL_AUTOINSTALL=--defaultdeps
PERL_BADLANG (unset)
PERL_EXTUTILS_AUTOINSTALL=--defaultdeps
PERL_MM_USE_DEFAULT=1
SHELL=/bin/zsh
It gives me (5.10.1):
$ perl -e 'eval { $::{"@"}="" }'
Assertion sv failed: file "sv.c", line 4097 at -e line 1.
Abigail
> It gives me (5.10.1):
>
> $ perl -e 'eval { $::{"@"}="" }'
> Assertion sv failed: file "sv.c", line 4097 at -e line 1.
>
And blead:
$ perl -e 'eval { $::{"@"}="" }'
perl: sv.c:4315: Perl_sv_setpvn: Assertion `sv' failed.
Aborted
The call originates in CLEAR_ERRSV(); in pp_leavetry
This will also trigger the same assertion, but with a different call stack:
$ perl -e '$::{"@"}=""; eval {}'
This is more fun:
$ perl -e 'eval { $::{"@"}=\3 }'
Modification of a read-only value attempted at -e line 1.
This blows the C stack with infinite recursion:
perl -e '$::{"@"}=\3; eval {}'
I'm not certain what the right fix for the original bug is. I'm really not
sure about the problems with using \3
Nicholas Clark
Is there really any good reason not to just say 'don't be so damn
stupid'? What possible use is there for modifying the symbol table entry
of a magic variable?
One fix might be to forbid the assignment altogether.
Ben
The interpreter shouldn’t just up and crash. No matter what.
> What possible use is there for modifying the symbol table
> entry of a magic variable?
Probably none. That’s a different question from your first one.
> One fix might be to forbid the assignment altogether.
An orderly exception would be just fine, just so long as the
interpreter doesn’t summarily kick the bucket.
Regards,
--
Aristotle Pagaltzis // <http://plasmasturm.org/>
Should be fixed by f5fa9033b8c1fdcbd7710850b3b0380d6b937853.
> This is more fun:
>
> $ perl -e 'eval { $::{"@"}=\3 }'
> Modification of a read-only value attempted at -e line 1.
>
> This blows the C stack with infinite recursion:
>
> perl -e '$::{"@"}=\3; eval {}'
>
> I'm not certain what the right fix for the original bug is. I'm really not
> sure about the problems with using \3
Fixed with dfd167e94af611f6248e804cb228b35ca4123bd6
Nicholas Clark