Skip Menu |

This queue is for tickets about the Params-Validate CPAN distribution.

Report information
The Basics
Id: 62105
Status: resolved
Priority: 0/
Queue: Params-Validate

People
Owner: Nobody in particular
Requestors: me [...] druxa.ru
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: Segfault using Params::Validate
Date: Wed, 13 Oct 2010 17:41:16 +0400
To: bug-params-validate [...] rt.cpan.org
From: Мищенко Андрей <me [...] druxa.ru>
Hello there! I experience a segmentation fault using Params::Validate, the minumal case i could reproduce is $ perl -e 'use Params::Validate qw(); sub validate(\@$) { shift @{$_[0]} if @{$_[0]} == 1 and not defined $_[0]->[0]; goto &Params::Validate::validate; } sub g { my $self = shift; print validate(@_, {}) } my $self = bless{}; eval { $self->g({a => 1}) }; $self->g(undef);' Attempt to free unreferenced scalar: SV 0x6690f0, Perl interpreter: 0x603010 at -e line 1. Segmentation fault Good luck! :) Params::Validate is of version 0.95 and my configuration is $ uname -a Linux hardy64.feeds.yandex.net 2.6.24-23-openvzyandex #2 SMP Fri Apr 24 18:54:48 MSD 2009 x86_64 GNU/Linux $ perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=2.6.15.7, archname=x86_64-linux-gnu-thread-multi uname='linux yellow 2.6.15.7 #1 smp sun sep 23 13:51:52 utc 2007 x86_64 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=x86_64-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 -Ud_ualarm -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=define use64bitall=define 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.2.3 20071123 (prerelease) (Ubuntu 4.2.2-3ubuntu4)', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=8, 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.6.1.so, so=so, useshrplib=true, libperl=libperl.so.5.8.8 gnulibc_version='2.6.1' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_64_BIT_ALL USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API Built under linux Compiled at Nov 27 2007 10:56:40 %ENV: PERL5LIB="" @INC: /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
Subject: Re: [rt.cpan.org #62105] Segfault using Params::Validate
Date: Sat, 16 Oct 2010 11:38:20 -0500 (CDT)
To: Мищенко Андрей via RT <bug-Params-Validate [...] rt.cpan.org>
From: Dave Rolsky <autarch [...] urth.org>
On Wed, 13 Oct 2010, Мищенко Андрей via RT wrote: Show quoted text
> $ perl -e 'use Params::Validate qw(); sub validate(\@$) { shift @{$_[0]} if @{$_[0]} == 1 and not defined $_[0]->[0]; goto &Params::Validate::validate; } sub g { my $self = shift; print validate(@_, {}) } my $self = bless{}; eval { $self->g({a => 1}) }; $self->g(undef);' > Attempt to free unreferenced scalar: SV 0x6690f0, Perl interpreter: 0x603010 at -e line 1. > Segmentation fault
Hmm, no seg fault for me with 5.10.1 or 5.12.1, but it does seg fault with 5.8.8 and 5.8.5. Patches are welcome, but I'm probably not going to work on this. My guess is some sort of Perl core bug that was fixed in the 5.10.x series. -dave /*============================================================ http://VegGuide.org http://blog.urth.org Your guide to all that's veg House Absolute(ly Pointless) ============================================================*/
Hi, I encounter a similar problem when using Params::Validate::XS on Poky (cross-compile linux distribution creator): root@curie:~# gdb `which perl` GNU gdb (GDB) 7.6.2 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "arm-poky-linux-gnueabi". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /usr/bin/perl5.14.3...Reading symbols from /usr/bin/.debug/perl5.14.3...done. done. (gdb) set args -MParams::Validate -e 'validate(@foo, {foo => 1, bar => 0,})' (gdb) run Starting program: /usr/bin/perl -MParams::Validate -e 'validate(@foo, {foo => 1, bar => 0,})' [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". Program received signal SIGSEGV, Segmentation fault. strlen () at ../ports/sysdeps/arm/armv6t2/strlen.S:146 146 sfi_breg src, \ (gdb) bt #0 strlen () at ../ports/sysdeps/arm/armv6t2/strlen.S:146 #1 0x2ab1e098 in Perl_gv_stashpv (my_perl=my_perl@entry=0x12008, name=0x73203a63 <Address 0x73203a63 out of bounds>, create=create@entry=1) at gv.c:921 #2 0x2ae2d73c in get_options (options=options@entry=0x0) at lib/Params/Validate/XS.xs:808 #3 0x2ae33d1c in XS_Params__Validate__XS_validate (my_perl=<optimized out>, cv=<optimized out>) at lib/Params/Validate/XS.xs:1602 #4 0x2ab7f16c in Perl_pp_entersub (my_perl=0x12008) at pp_hot.c:3046 #5 0x2ab76de8 in Perl_runops_standard (my_perl=0x12008) at run.c:41 #6 0x2ab152b4 in S_run_body (oldscope=716264116, my_perl=0x12008) at perl.c:2365 #7 perl_run (my_perl=0x12008) at perl.c:2283 #8 0x00008c54 in main (argc=2130705864, argv=0x8d94 <frame_dummy>, env=0x0) at perlmain.c:120 Since other modules built using M::B (eg. Math::Random::ISAAC::XS) don't have generic problems (btw - it segfaults when @foo contains some items, either), I expect it's a similar area.
I tried to build directly on the host - it seems to be a problem with Module::Build and cross compile in some edge case. Building the module directly on the board results in working P::V.