httpd-apreq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sven Geisler <sgeis...@aeccom.com>
Subject segfault in Apache::Upload::fh with libapreq 1.1rc2
Date Mon, 30 Dec 2002 14:02:01 GMT
Hi,

I use libapreq 1.1rc2 with self-compiled perl 5.8.0, mod_perl 1.27,
apache 1.3.27:

my Perl code:

if ($r->method_number == Apache::Constants::M_POST) {
	foreach my $upload ($r->upload) {
		my $name = $upload->name;
		if (ref($upload->fh)) {
			# do something with upload
			...
		}
	}

	# do more
	...
}

I got this message in gdb:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 8192 (LWP 25219)]
0x420693d7 in fileno_unlocked () from /lib/i686/libc.so.6

(gdb) where
#0  0x420693d7 in fileno_unlocked () from /lib/i686/libc.so.6
#1  0x40407591 in XS_Apache__Upload_fh (cv=0x8306a54) at Request.xs:501
#2  0x400f6ea8 in Perl_pp_entersub () at pp_hot.c:2773
#3  0x400deb17 in Perl_runops_debug () at dump.c:1398
#4  0x4009c2ec in S_call_body (myop=0xbfffee70, is_eval=0) at
perl.c:2045
#5  0x4009bfb6 in Perl_call_sv (sv=0x4017cd94, flags=68) at perl.c:1963
#6  0x4009b9d4 in Perl_call_method (methname=0x0, flags=68) at
perl.c:1857
#7  0x0806be24 in perl_call_handler ()
#8  0x0806b9c1 in perl_run_stacked_handlers ()
#9  0x0806a25a in perl_handler ()
#10 0x08089563 in ap_invoke_handler ()
#11 0x0809aff2 in ap_some_auth_required ()
#12 0x0809b261 in ap_process_request ()
#13 0x08093c30 in ap_child_terminate ()
#14 0x08093eb1 in ap_child_terminate ()
#15 0x08093f2f in ap_child_terminate ()
#16 0x080949a4 in ap_child_terminate ()
#17 0x08094cb4 in main ()
#18 0x420158d4 in __libc_start_main () from /lib/i686/libc.so.6

In my Perl code the segfault is in $upload->fh.
I looked in Request.xs.:

	fd = PerlLIO_dup(fileno(ApacheUpload_fh(upload)));

fileno is called with zero ptr (upload->fp is null).

I would suggest following code in Request.xs (line 490) to prevent using
zero ptrs.
		
ApreqInputStream
ApacheUpload_fh(upload)
    Apache::Upload upload

    PREINIT:
    int fd;
    FILE *fp;

    CODE:
    /* debug code */
    if ( !upload )
       XSRETURN_UNDEF;

    fp = ApacheUpload_fh(upload);
    if ( !fp )
       XSRETURN_UNDEF;       

    fd = PerlLIO_dup(fileno(fp));

    if ( !(RETVAL = PerlIO_fdopen(fd, "r")) )
	    XSRETURN_UNDEF;

    OUTPUT:
...

I guess, it's more perl 5.8.0 than libapreq.
I got another segfault with the process that receive successful the file
in the next request in glibc fflush. Any idea?

Regards
Sven.



machine: RedHat 8.0 with glibc 2.2.93-5

perl -V:
Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.4.18-18.8.0, archname=i686-linux
    uname='linux andes 2.4.18-18.8.0 #1 wed nov 13 22:52:09 est 2002
i686 athlon i386 gnulinux '
    config_args='-des -Doptimize=-O2 -mcpu=athlon -march=athlon -g
-Dcc=cc -Dprefix=/local/cs -Uinstallusrbinperl
-Dcf_by=AEC/communications GmbH -Duseshrplib -Uusethreads -Uuseithreads
-Duselargefiles -Ud_dosuid -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm
-Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -Uinstallusrbinperl
-Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr -DDEBUGGING'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-DDEBUGGING -fno-strict-aliasing
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
    optimize='-O2 -mcpu=athlon -march=athlon -g',
    cppflags='-DDEBUGGING -fno-strict-aliasing -I/usr/include/gdbm'
    ccversion='', gccversion='3.2 20020903 (Red Hat Linux 8.0 3.2-7)',
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=-lnsl -lgdbm -ldb -ldl -lm -lc -lcrypt -lutil
    perllibs=-lnsl -ldl -lm -lc -lcrypt -lutil
    libc=/lib/libc-2.2.93.so, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version='2.2.93'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic
-Wl,-rpath,/local/cs/lib/perl5/5.8.0/i686-linux/CORE'
    cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):
  Compile-time options: DEBUGGING USE_LARGE_FILES
  Built under linux
  Compiled at Dec 23 2002 11:09:59
  %ENV:
   
PERL5LIB="/local/sgeisler/andes2010/cs_code/perl5:/local/sgeisler/andes2010/cs_code/batchproc/renderjob"
  @INC:
    /local/sgeisler/andes2010/cs_code/perl5
    /local/sgeisler/andes2010/cs_code/batchproc/renderjob
    /local/cs/lib/perl5/5.8.0/i686-linux
    /local/cs/lib/perl5/5.8.0
    /local/cs/lib/perl5/site_perl/5.8.0/i686-linux
    /local/cs/lib/perl5/site_perl/5.8.0
    /local/cs/lib/perl5/site_perl
    .



Mime
View raw message