[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]

[perl #37694] segfault with PerlIO::get_layers()



# New Ticket Created by  Peter Dintelmann 
# Please include the string:  [perl #37694]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=37694 >


This is a bug report for perl from Peter.Dintelmann@dresdner-bank.com,
generated with the help of perlbug 1.35 running under perl v5.8.7.

Calling PerlIO::get_layers() with an argument which is neither
a handle nor contains a valid string results in a segmentation
fault.

    $ /opt/perl32/bin/perl -e 'PerlIO::get_layers undef'
    Segmentation Fault

    $ /opt/perl32/bin/perl -e 'PerlIO::get_layers 123'
    Segmentation Fault

This is only to confirm my new nickname from the "This week..."
summary :-)

The patch below tries to fix this and the code now runs ok.

    $ PERLIO=:utf8 /opt/perl32/bin/perl -le '$,=$/; print \
    > map {"$_: " . join ":", PerlIO::get_layers $_} \
    > (undef, 123, *STDIN, "STDIN", STDIN)'
    :
    123:
    *main::STDIN: unix:utf8
    STDIN: unix:utf8
    STDIN: unix:utf8

Proposed patch:

$ diff -ur universal.c.ori universal.c
--- universal.c.ori     Wed Nov 16 14:20:35 2005
+++ universal.c Wed Nov 16 14:46:29 2005
@@ -619,7 +619,7 @@
        if (!isGV(sv)) {
             if (SvROK(sv) && isGV(SvRV(sv)))
                  gv = (GV*)SvRV(sv);
-            else
+            else if (SvPOKp(sv))
                  gv = gv_fetchpv(SvPVX(sv), FALSE, SVt_PVIO);
        }


---
Flags:
    category=core
    severity=low
---
Site configuration information for perl v5.8.7:

Configured by p013176 at Wed Jun  1 15:12:46 MEST 2005.

Summary of my perl5 (revision 5 version 8 subversion 7) configuration:
  Platform:
    osname=solaris, osvers=2.9, archname=sun4-solaris-thread-multi-64int
    uname='sunos oikbm03 5.9 generic_112233-01 sun4u sparc sunw,ultra-5_10 '
    config_args='-Dprefix=/opt/perl32 -Uinstallusrbinperl -Dcc=gcc
-Doptimize=-O2 -Aldflags=-R/usr/local/lib -Duseshrplib -Duseperlio
-Dusethreads -Duselargefiles -Duse64bitint -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=define use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-D_REENTRANT -fno-strict-aliasing -pipe
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-D_REENTRANT -fno-strict-aliasing -pipe -I/usr/local/include'
    ccversion='', gccversion='3.4.2', gccosandvers='solaris2.9'
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=87654321
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags =' -R/usr/local/lib -L/usr/local/lib '
    libpth=/usr/local/lib /usr/lib /usr/ccs/lib
    libs=-lsocket -lnsl -lgdbm -ldl -lm -lpthread -lc
    perllibs=-lsocket -lnsl -ldl -lm -lpthread -lc
    libc=/lib/libc.so, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='  -R
/opt/perl32/lib/5.8.7/sun4-solaris-thread-multi-64int/CORE'
    cccdlflags='-fPIC', lddlflags='-G -R/usr/local/lib -L/usr/local/lib'

Locally applied patches:


---
@INC for perl v5.8.7:
    /opt/perl32/lib/5.8.7/sun4-solaris-thread-multi-64int
    /opt/perl32/lib/5.8.7
    /opt/perl32/lib/site_perl/5.8.7/sun4-solaris-thread-multi-64int
    /opt/perl32/lib/site_perl/5.8.7
    /opt/perl32/lib/site_perl
    .

---
Environment for perl v5.8.7:
    HOME=/export/home/p013176
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/usr/bin:/bin:/usr/sbin:/sbin
    PERL_BADLANG (unset)
    SHELL=/usr/bin/bash


[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]