Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.94k stars 554 forks source link

"warn" causes segmentation fault in Encode #8928

Closed p5pRT closed 10 years ago

p5pRT commented 17 years ago

Migrated from rt.perl.org#43214 (status was 'resolved')

Searchable as RT43214$

p5pRT commented 17 years ago

From vincent-perl@vinc17.net

Created by vincent@vinc17.org

The following script causes a segmentation fault​:

#!/usr/bin/env perl

use strict; use I18N​::Langinfo qw(langinfo CODESET);

my $encoding = langinfo CODESET; print "Encoding​: $encoding\n";

my $agrave = chr(0xe0); my $str = "A grave = '$agrave'"; print "Test 1\n"; print STDERR " print​: $str\n"; print "Test 2\n"; warn " warn​: $str\n"; binmode STDERR\, "​:encoding($encoding)"; print "Test 3\n"; print STDERR " print​: $str\n"; print "Test 4\n"; warn " warn​: $str\n";

$ ./warntest Encoding​: ISO-8859-1 Test 1   print​: A grave = 'à' Test 2   warn​: A grave = 'à' Test 3   print​: A grave = 'à' Test 4 zsh​: segmentation fault (core dumped) ./warntest

The backtrace​:

(gdb) bt #0 0xb7e6effc in _int_malloc () from /lib/i686/cmov/libc.so.6 #1 0xb7e70d0e in malloc () from /lib/i686/cmov/libc.so.6 #2 0x080ac83f in Perl_safesysmalloc () #3 0x080cae8c in Perl_sv_grow () #4 0x080cafa3 in Perl_newSV () #5 0xb7ba6fd3 in ?? () from /usr/lib/perl/5.8/auto/Encode/Encode.so #6 0x0814e008 in ?? () #7 0x00000401 in ?? () #8 0x00000000 in ?? ()

There seems to be something wrong with the backtrace. With 5.8.7\, there was an infinite recursion\, as shown by​:

  http​://bugs.debian.org/cgi-bin/bugreport.cgi?bug=343831

Perl Info ``` Flags: category=core severity=medium Site configuration information for perl v5.8.8: Configured by Debian Project at Wed Dec 6 23:17:41 UTC 2006. Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=2.6.18.3, archname=i486-linux-gnu-thread-multi uname='linux saens 2.6.18.3 #1 smp sat nov 25 13:39:52 est 2006 i686 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.8 -Dsitearch=/usr/local/lib/perl/5.8.8 -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 -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des' hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemultiplicity=define useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2', cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include' ccversion='', gccversion='4.1.2 20061115 (prerelease) (Debian 4.1.1-20)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=/lib/libc-2.3.6.so, so=so, useshrplib=true, libperl=libperl.so.5.8.8 gnulibc_version='2.3.6' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib' Locally applied patches: @INC for perl v5.8.8: /home/vlefevre/lib/site_perl/i486-linux-gnu-thread-multi /home/vlefevre/lib/site_perl /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl . Environment for perl v5.8.8: HOME=/home/vlefevre LANG=POSIX LANGUAGE (unset) LC_COLLATE=POSIX LC_CTYPE=en_US.ISO8859-1 LC_TIME=en_DK LD_LIBRARY_PATH=/lib:/home/vlefevre/i686/lib:/home/vlefevre/lib LOGDIR (unset) PATH=/home/vlefevre/bin:/home/vlefevre/i686/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/games:/usr/milip-local/stow/maple-10/maple/bin:. PERL5LIB=/home/vlefevre/lib/site_perl PERL_BADLANG (unset) SHELL=zsh ```
p5pRT commented 17 years ago

From @smpeters

On Thu Jun 14 03​:57​:22 2007\, vincent \<!-- x --> at vinc17.org wrote​:

This is a bug report for perl from vincent \<!-- x --> at vinc17.org\, generated with the help of perlbug 1.35 running under perl v5.8.8.

----------------------------------------------------------------- [Please enter your report here]

The following script causes a segmentation fault​:

#!/usr/bin/env perl

use strict; use I18N​::Langinfo qw(langinfo CODESET);

my $encoding = langinfo CODESET; print "Encoding​: $encoding\n";

my $agrave = chr(0xe0); my $str = "A grave = '$agrave'"; print "Test 1\n"; print STDERR " print​: $str\n"; print "Test 2\n"; warn " warn​: $str\n"; binmode STDERR\, "​:encoding($encoding)"; print "Test 3\n"; print STDERR " print​: $str\n"; print "Test 4\n"; warn " warn​: $str\n";

$ ./warntest Encoding​: ISO-8859-1 Test 1 print​: A grave = 'à' Test 2 warn​: A grave = 'à' Test 3 print​: A grave = 'à' Test 4 zsh​: segmentation fault (core dumped) ./warntest

The backtrace​:

(gdb) bt #0 0xb7e6effc in _int_malloc () from /lib/i686/cmov/libc.so.6 #1 0xb7e70d0e in malloc () from /lib/i686/cmov/libc.so.6 #2 0x080ac83f in Perl_safesysmalloc () #3 0x080cae8c in Perl_sv_grow () #4 0x080cafa3 in Perl_newSV () #5 0xb7ba6fd3 in ?? () from /usr/lib/perl/5.8/auto/Encode/Encode.so #6 0x0814e008 in ?? () #7 0x00000401 in ?? () #8 0x00000000 in ?? ()

There seems to be something wrong with the backtrace. With 5.8.7\, there was an infinite recursion\, as shown by​:

http​://bugs.debian.org/cgi-bin/bugreport.cgi?bug=343831

I can't reproduce this problem\, but I also don't know what version of Encode you're using. Please reply to this email with the output from...

  perl -MEncode -wle'print $Encode​::VERSION'

Thanks!

p5pRT commented 17 years ago

The RT System itself - Status changed from 'new' to 'open'

p5pRT commented 17 years ago

From vincent-perl@vinc17.net

On 2007-06-29 09​:05​:41 -0700\, Steve Peters via RT wrote​:

I can't reproduce this problem\, but I also don't know what version of Encode you're using. Please reply to this email with the output from...

perl \-MEncode \-wle'print $Encode&#8203;::VERSION'

$ perl -MEncode -wle'print $Encode​::VERSION' 2.12

Note​: the module is provided by the Debian perl package (current perl package version​: 5.8.8-7).

-- Vincent Lefèvre \vincent@&#8203;vinc17\.org - Web​: \<http​://www.vinc17.org/> 100% accessible validated (X)HTML - Blog​: \<http​://www.vinc17.org/blog/> Work​: CR INRIA - computer arithmetic / Arenaire project (LIP\, ENS-Lyon)

p5pRT commented 17 years ago

From vincent-perl@vinc17.net

Note​: this is even worse with the C locale​:

vin% locale LANG=POSIX LC_CTYPE=en_US.ISO8859-1 LC_NUMERIC="POSIX" LC_TIME=en_DK LC_COLLATE=POSIX LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL= vin% ./warntest Encoding​: ISO-8859-1 Test 1   print​: A grave = 'à' Test 2   warn​: A grave = 'à' Test 3   print​: A grave = 'à' Test 4 zsh​: segmentation fault (core dumped) ./warntest vin% LC_ALL=C ./warntest Encoding​: ANSI_X3.4-1968 Test 1   print​: A grave = 'à' Test 2   warn​: A grave = 'à' Test 3 zsh​: segmentation fault (core dumped) LC_ALL=C ./warntest vin%

-- Vincent Lefèvre \vincent@&#8203;vinc17\.org - Web​: \<http​://www.vinc17.org/> 100% accessible validated (X)HTML - Blog​: \<http​://www.vinc17.org/blog/> Work​: CR INRIA - computer arithmetic / Arenaire project (LIP\, ENS-Lyon)

p5pRT commented 17 years ago

From @smpeters

On Fri Jun 29 09​:25​:45 2007\, vincent \<!-- x --> at vinc17.org wrote​:

On 2007-06-29 09​:05​:41 -0700\, Steve Peters via RT wrote​:

I can't reproduce this problem\, but I also don't know what version of Encode you're using. Please reply to this email with the output from...

perl \-MEncode \-wle'print $Encode&#8203;::VERSION'

$ perl -MEncode -wle'print $Encode​::VERSION' 2.12

Note​: the module is provided by the Debian perl package (current perl package version​: 5.8.8-7).

Can you replicate the problem with the most recent version available on CPAN (2.23)?

p5pRT commented 17 years ago

From vincent-perl@vinc17.net

On 2007-06-29 13​:58​:10 -0700\, Steve Peters via RT wrote​:

Can you replicate the problem with the most recent version available on CPAN (2.23)?

Same problem (here under Mac OS X)​:

prunille% perl -MEncode -wle'print $Encode​::VERSION' 2.23 prunille% ./warntest Encoding​: ISO8859-1 Test 1   print​: A grave = 'à' Test 2   warn​: A grave = 'à' Test 3   print​: A grave = 'à' Test 4 zsh​: segmentation fault ./warntest prunille% LC_ALL=C ./warntest Encoding​: US-ASCII Test 1   print​: A grave = 'à' Test 2   warn​: A grave = 'à' Test 3 zsh​: segmentation fault LC_ALL=C ./warntest prunille%

-- Vincent Lefèvre \vincent@&#8203;vinc17\.org - Web​: \<http​://www.vinc17.org/> 100% accessible validated (X)HTML - Blog​: \<http​://www.vinc17.org/blog/> Work​: CR INRIA - computer arithmetic / Arenaire project (LIP\, ENS-Lyon)

p5pRT commented 14 years ago

From vincent@vinc17.net

With perl 5.10.0 and 5.10.1\, I no longer get a segmentation fault\, but the result of Test 4 is incorrect​:

Encoding​: ISO-8859-1 [...] Test 4   warn​: A grave = '\x{09ca}

without a newline\, and under UTF-8 locales​:

Encoding​: UTF-8 [...] Test 4   warn​: A grave = '\xE0'

-- Vincent Lefèvre \vincent@&#8203;vinc17\.net - Web​: \<http​://www.vinc17.net/> 100% accessible validated (X)HTML - Blog​: \<http​://www.vinc17.net/blog/> Work​: CR INRIA - computer arithmetic / Arénaire project (LIP\, ENS-Lyon)

p5pRT commented 10 years ago

From @jkeenan

On Thu Oct 29 08​:56​:06 2009\, vincent@​vinc17.net wrote​:

With perl 5.10.0 and 5.10.1\, I no longer get a segmentation fault\, but the result of Test 4 is incorrect​:

Encoding​: ISO-8859-1 [...] Test 4 warn​: A grave = '\x{09ca}

without a newline\, and under UTF-8 locales​:

Encoding​: UTF-8 [...] Test 4 warn​: A grave = '\xE0'

There has been no correspondence in this RT in more than four years.

Tonight I built Perl blead with -Dusethreads and -Duselargefiles on the Dromedary server\, then ran the OP's program. This was the output​:

##### $ ./perl -Ilib ../p5p/43214-langinfo.pl Encoding​: UTF-8 Test 1   print​: A grave = '?' Test 2   warn​: A grave = '?' Test 3   print​: A grave = 'à' Test 4   warn​: A grave = 'à' #####

Is there still a problem which needs addressing?

Thank you very much. Jim Keenan

p5pRT commented 10 years ago

From vincent@vinc17.net

On 2013-12-15 18​:58​:28 -0800\, James E Keenan via RT wrote​:

Is there still a problem which needs addressing?

No\, everything is OK (both with ISO-8859-1 and with UTF-8) in Debian/unstable\, using perl v5.18.1.

This bug can be closed.

-- Vincent Lefèvre \vincent@&#8203;vinc17\.net - Web​: \<http​://www.vinc17.net/> 100% accessible validated (X)HTML - Blog​: \<http​://www.vinc17.net/blog/> Work​: CR INRIA - computer arithmetic / AriC project (LIP\, ENS-Lyon)

p5pRT commented 10 years ago

From @jkeenan

On Mon Dec 16 10​:18​:03 2013\, vincent@​vinc17.net wrote​:

On 2013-12-15 18​:58​:28 -0800\, James E Keenan via RT wrote​:

Is there still a problem which needs addressing?

No\, everything is OK (both with ISO-8859-1 and with UTF-8) in Debian/unstable\, using perl v5.18.1.

This bug can be closed.

Closing per request from OP.

Thank you very much. Jim Keenan

p5pRT commented 10 years ago

@jkeenan - Status changed from 'open' to 'resolved'