[Pkg-postgresql-public] Bug#704802: [HACKERS] plperl segfault in plperl_trusted_init() on kfreebsd

Christoph Berg cb at df7cb.de
Wed May 22 00:33:44 UTC 2013

Re: Andrew Dunstan 2013-05-17 <51964770.6070405 at dunslane.net>
> I have reproduced this. It happens with both the distro perl and a
> home-built perl 5.14. AFAICT this is a Perl bug. Any reference at
> all to ERRSV at the point this occurs causes a core dump, even just
> assigning it to a local SV * variable. Maybe you should take this up
> with the Perl people. It certainly seems mysterious that this should
> only occur on this platform.

I've just tried to look into this but got lost in chasing about 5
nested layers of ERRSV #defines. :-/

The crash also happens with libperl5.18 (5.18.0-1) on unstable/kfreebsd-amd64.

./configure --with-perl; make; cd src/pl/perl; make clean

postgresql-9.3/src/pl/plperl $ make PROFILE="-g -O0"
'/usr/bin/perl' ./text2macro.pl --strip='^(\#.*|\s*)$' plc_perlboot.pl plc_trusted.pl > perlchunks.h
'/usr/bin/perl' plperl_opmask.pl plperl_opmask.h
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -O0 -fpic -I. -I. -I../../../src/include -D_GNU_SOURCE  -I/usr/lib/perl/5.18/CORE  -c -o plperl.o plperl.c
'/usr/bin/perl' /usr/share/perl/5.18/ExtUtils/xsubpp -typemap /usr/share/perl/5.18/ExtUtils/typemap SPI.xs >SPI.c
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -O0 -fpic -I. -I. -I../../../src/include -D_GNU_SOURCE  -I/usr/lib/perl/5.18/CORE  -c -o SPI.o SPI.c
'/usr/bin/perl' /usr/share/perl/5.18/ExtUtils/xsubpp -typemap /usr/share/perl/5.18/ExtUtils/typemap Util.xs >Util.c
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -O0 -fpic -I. -I. -I../../../src/include -D_GNU_SOURCE  -I/usr/lib/perl/5.18/CORE  -c -o Util.o Util.c
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -O0 -fpic -shared -o plperl.so plperl.o SPI.o Util.o -L../../../src/port -L../../../src/common -Wl,--as-needed -Wl,-rpath,'/usr/lib/perl/5.18/CORE',--enable-new-dtags -g -O0  -fstack-protector -L/usr/local/lib  -L/usr/lib/perl/5.18/CORE -lperl -ldl -lm -lpthread -lc -lcrypt 

postgresql-9.3/src/pl/plperl $ make check
../../../src/test/regress/pg_regress --inputdir=. --temp-install=./tmp_check --top-builddir=../../..   --dbname=pl_regression --load-extension=plperl  --load-extension=plperlu plperl plperl_lc plperl_trigger plperl_shared plperl_elog plperl_util plperl_init plperlu plperl_array plperl_plperlu
============== running regression test queries        ==============
test plperl                   ... FAILED (test process exited with exit code 2)

#0  0x000000080a4274ed in plperl_trusted_init () at plperl.c:937
937		if (SvTRUE(ERRSV))
#1  0x000000080a42602d in select_perl_context (trusted=1 '\001') at plperl.c:600
#2  0x000000080a430cb1 in compile_plperl_function (fn_oid=49152, is_trigger=0 '\000') at plperl.c:2661
#3  0x000000080a42ca4d in plperl_validator (fcinfo=0x7fffffffbeb0) at plperl.c:1900
#4  0x000000000071ffb6 in OidFunctionCall1Coll ()
#5  0x00000000004ec3b7 in ProcedureCreate ()
#6  0x000000000054c4ee in CreateFunction ()
#7  0x000000000065889f in ProcessUtilitySlow.isra.2 ()
#8  0x0000000000657b4c in standard_ProcessUtility ()
#9  0x0000000000655467 in PortalRunUtility ()
#10 0x0000000000656055 in PortalRunMulti ()
#11 0x0000000000656b42 in PortalRun ()
#12 0x0000000000653ef3 in PostgresMain ()
#13 0x0000000000464471 in ServerLoop ()
#14 0x00000000006144e1 in PostmasterMain ()
#15 0x0000000000464cab in main ()

cb at df7cb.de | http://www.df7cb.de/

More information about the Pkg-postgresql-public mailing list