[ic] perl5.6.1 and evals SOLVED now UNSOLVED again

interchange-users@lists.akopia.com interchange-users@lists.akopia.com
Fri Jun 15 18:03:00 2001


I've got a small usertag and page that seems
to kill perl evals.  This is in interchange 
4.7.3 on our debian machines. It does not seem 
to kill interchange itself, so I'm not 100%
sure if it is a perl issue.  It is, however,
dependant on the perl version, so maybe it
is.  Anyone upgrading 5.6.0 to 5.6.1, at least
on a debian box, should be cautious.
 

--

Description:

On an up to date debian "unstable" system running
perl 5.6.1 this usertag and simple eval causes evals
to misbehave (segfault?) within an unpatched interchange.

The same thing happens with a home build perl 5.7.1
(using & -d defaults)  100% tests successful.

That same interchange runs on 5.6.0 machines no problem.

If I hack it to run with a local 5.6.0 binary and all
the 5.6.1 libs (modify Config.pm and symlink a few
5.6.0 directories to 5.6.1 equivalents) it works.

I do not know how to troubleshoot this further.  It's
not like I can run interchange in gdb.  Nor can I tell
for sure if this is a perl or interchange issue, except 
that perl is behaving inconsistently from 5.6.0 to 5.6.1.

I'd be curious if anyone else can run this on a perl 5.6.1
machine and to hear if it works or does not.



#############
## xxx

UserTag xxx   HasEndTag 1
UserTag xxx   Interpolate       0
UserTag xxx   Routine<<XXX
sub {
    ::logGlobal("logGlobal in scope in tag");
    my $str = eval {
        my $OUT=eval $_[0];
	die $@ if $@;
        return '' unless $OUT;
        return $OUT;
    };
    if($@) {
        my($err);
        $err=$@;
        ::logGlobal("EVAL FAILED: $err");
        $err=~s/\n/<BR>/g;
	::logGlobal("xxx done");
        return "error: $err";
    }
    ::logGlobal("xxx done");
    return "str: $str";
}
XXX

#end

For this simplified page:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML><HEAD>
</HEAD>
<BODY ALINK="#990000" BGCOLOR="#FFFFFF" LINK="#0165FF" TEXT="#000000" VLINK="#0000FF">
[xxx]
{    
	use strict 'vars';
	my(@OUT);  # COMMENT THIS LINE AND EVAL FAILS AND IS **NOT** TRAPPED
	push @OUT,'HELLO WORLD';
	::logGlobal("logGlobal is in scope here");
	return join '',@OUT;
}
[/xxx]
</BODY>
</HTML>


The development machine logs this and returns server read error (probably segfault)
genii.znet.maine.com Rkagu3AP:maine.com - [15/June/2001:12:02:49 -0500] PAGE: xxx lobsters /Catalog/lobsters.cgi/xxx.html logGlobal in scope in tag


The production machine (5.6.0) logs this and returns page with "str:"
genii.znet.maine.com gWuyvxkm:maine.com - [15/June/2001:12:04:13 -0500] PAGE: xxx products /Catalog/products.cgi/xxx.html logGlobal in scope in tag
genii.znet.maine.com gWuyvxkm:maine.com - [15/June/2001:12:04:13 -0500] PAGE: xxx products /Catalog/products.cgi/xxx.html EVAL FAILED: Global symbol "@OUT" requires explicit package name at (eval 45) line 5.
> Global symbol "@OUT" requires explicit package name at (eval 45) line 7.
> 




###################################
This is perl on production machine:
Summary of my perl5 (revision 5.0 version 6 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.4.2, archname=i386-linux
    uname='linux duende 2.4.2 #1 fri mar 2 13:52:32 est 2001 i686 unknown '
    config_args='-Dccflags=-DDEBIAN -Darchname=i386-linux -Dprefix=/usr -Dprivlib=/usr/share/perl/5.6.0 -Darchlib=/usr/lib/perl/5.6.0 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.6.0 -Dsitearch=/usr/local/lib/perl/5.6.0 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/pager -Uafs -Ud_csh -Uusesfio -Duseshrplib -Dlibperl=libperl.so.5.6.0 -Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef
    useperlio=undef d_sfio=undef uselargefiles=define 
    use64bitint=undef use64bitall=undef uselongdouble=undef usesocks=undef
  Compiler:
    cc='cc', optimize='-O2', gccversion=2.95.3 20010219 (prerelease)
    cppflags='-DDEBIAN -fno-strict-aliasing -I/usr/local/include'
    ccflags ='-DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
    stdchar='char', d_stdstdio=define, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    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, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -ldl -lm -lc -lcrypt
    libc=/lib/libc-2.2.2.so, so=so, useshrplib=true, libperl=libperl.so.5.6.0
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl): 
  Compile-time options: USE_LARGE_FILES
  Built under linux
  Compiled at Mar  9 2001 05:59:18
  @INC:
    /usr/local/lib/perl/5.6.0
    /usr/local/share/perl/5.6.0
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.6.0
    /usr/share/perl/5.6.0
    /usr/local/lib/site_perl/i386-linux
    /usr/local/lib/site_perl
    /usr/lib/perl5/5.6/i386-linux
    /usr/lib/perl5/5.6
    /usr/lib/perl5/5.005/i386-linux
    .

###################################
This is perl on development machine:
Summary of my perl5 (revision 5.0 version 6 subversion 1) configuration:
  Platform:
    osname=linux, osvers=2.4.5-ac9, archname=i386-linux
    uname='linux duende 2.4.5-ac9 #1 thu jun 7 13:40:15 est 2001 i686 unknown '
    config_args='-Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=/usr -Dprivlib=/usr/share/perl/5.6.1 -Darchlib=/usr/lib/perl/5.6.1 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.6.1 -Dsitearch=/usr/local/lib/perl/5.6.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Dotherlibdirs=/usr/lib/perl5/5.6:/usr/lib/perl5/5.005 -Duseshrplib -Dlibperl=libperl.so.5.6.1 -Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef
    useperlio=undef d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
  Compiler:
    cc='cc', ccflags ='-DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-DDEBIAN -fno-strict-aliasing -I/usr/local/include'
    ccversion='', gccversion='2.95.4 20010604 (Debian prerelease)', 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, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lgdbm -ldbm -ldb -ldl -lm -lc -lcrypt
    perllibs=-ldl -lm -lc -lcrypt
    libc=/lib/libc-2.2.3.so, so=so, useshrplib=true, libperl=libperl.so.5.6.1
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl): 
  Compile-time options: USE_LARGE_FILES
  Built under linux
  Compiled at Jun 13 2001 06:08:30
  @INC:
    /usr/local/lib/perl/5.6.1
    /usr/local/share/perl/5.6.1
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.6.1
    /usr/share/perl/5.6.1
    /usr/local/lib/site_perl
    /usr/lib/perl5/5.6/i386-linux
    /usr/lib/perl5/5.6
    /usr/lib/perl5/5.005/i386-linux
    /usr/lib/perl5/5.005
    .

-- 

Christopher F. Miller, Publisher                             cfm@maine.com
MaineStreet Communications, Inc         208 Portland Road, Gray, ME  04039
1.207.657.5078                                       http://www.maine.com/
Content management, electronic commerce, internet integration, Debian linux