moose / MooseX-Params-Validate

an extension of Params::Validate using Moose's types
http://metacpan.org/release/MooseX-Params-Validate/
Other
0 stars 1 forks source link

Perl crash when calling validated_hash #6

Open autarch opened 3 years ago

autarch commented 3 years ago

Migrated from rt.cpan.org #91211 (status was 'open')

Requestors:

From rikard.nordgren@farmbio.uu.se on 2013-12-06 09:17:46 :

The short program below crashes perl 50% of the time with the following error:

Error in `perl': corrupted double-linked list: 0x0000000001baeeb8

I use MooseX::Params::Validate 0.18 with perl 5.14.2 on Ubuntu 13.10

!/usr/bin/perl

use MooseX::Params::Validate;

sub func { my %parm = validatedhash(\@, filter => { isa => 'ArrayRef[Int]', optional => 1 }, ); }

my @filt;

foreach (my $i = 0; $i < 16000; $i++) { $filt[$i] = 1; }

func('filter' => \@filt);

autarch commented 3 years ago

From drolsky@cpan.org (@autarch) on 2014-11-09 04:32:31 :

On Fri Dec 06 04:17:46 2013, rikard.nordgren@farmbio.uu.se wrote:

The short program below crashes perl 50% of the time with the following error:

Error in `perl': corrupted double-linked list: 0x0000000001baeeb8

I use MooseX::Params::Validate 0.18 with perl 5.14.2 on Ubuntu 13.10

!/usr/bin/perl

use MooseX::Params::Validate;

sub func { my %parm = validatedhash(\@, filter => { isa => 'ArrayRef[Int]', optional => 1 }, ); }

my @filt;

foreach (my $i = 0; $i < 16000; $i++) { $filt[$i] = 1; }

func('filter' => \@filt);

Sorry I didn't reply before. Does this still happen with a newer Perl too?

autarch commented 3 years ago

From rikard.nordgren@farmbio.uu.se on 2014-11-10 09:08:10 :

I run the script on perl 5.18.2 on 64 bit Ubuntu 14.04 and I still get a perl crash. I cannot test on any later version.

This is the output:

Error in `perl': free(): corrupted unsorted chunks: 0x000000000290ae60 Aborted (core dumped)

autarch commented 3 years ago

From rikard.nordgren@farmbio.uu.se on 2014-12-05 10:51:46 :

I have two more things to add:

  1. If 'ArrayRef[Int]' is replaced with 'ArrayRef' the program above will not crash.

  2. I have another program that crashes for the same reason on Windows 7 with strawberry perl 5.20.1.1 Perl either crashes with no message or "Bizarre copy of ... in list assignment in MooseX/Params/Validate.pm line 63" Here it was 'ArrayRef[Str]' which replaced to 'ArrayRef' caused the crashing to stop. Unfortunately my crashing program is really big and I haven't been able to reduce it to a small program without it not crashing any more.

On 2014-11-09 05:32, Dave Rolsky via RT wrote:

<URL: https://rt.cpan.org/Ticket/Display.html?id=91211 >

On Fri Dec 06 04:17:46 2013, rikard.nordgren@farmbio.uu.se wrote:

The short program below crashes perl 50% of the time with the following error:

Error in `perl': corrupted double-linked list: 0x0000000001baeeb8

I use MooseX::Params::Validate 0.18 with perl 5.14.2 on Ubuntu 13.10

!/usr/bin/perl

use MooseX::Params::Validate;

sub func { my %parm = validatedhash(\@, filter => { isa => 'ArrayRef[Int]', optional => 1 }, ); }

my @filt;

foreach (my $i = 0; $i < 16000; $i++) { $filt[$i] = 1; }

func('filter' => \@filt); Sorry I didn't reply before. Does this still happen with a newer Perl too?

-- Rikard Nordgren Systems developer

Dept of Pharmaceutical Biosciences Faculty of Pharmacy Uppsala University Box 591 75124 Uppsala

Phone: +46 18 4714308 www.farmbio.uu.se/research/researchgroups/pharmacometrics/

autarch commented 3 years ago

From srezic@cpan.org (@eserte) on 2014-12-05 19:09:27 :

On 2014-11-08 23:32:31, DROLSKY wrote:

On Fri Dec 06 04:17:46 2013, rikard.nordgren@farmbio.uu.se wrote:

The short program below crashes perl 50% of the time with the following error:

Error in `perl': corrupted double-linked list: 0x0000000001baeeb8

I use MooseX::Params::Validate 0.18 with perl 5.14.2 on Ubuntu 13.10

!/usr/bin/perl

use MooseX::Params::Validate;

sub func { my %parm = validatedhash(\@, filter => { isa => 'ArrayRef[Int]', optional => 1 }, ); }

my @filt;

foreach (my $i = 0; $i < 16000; $i++) { $filt[$i] = 1; }

func('filter' => \@filt);

Sorry I didn't reply before. Does this still happen with a newer Perl too?

I can also reproduce the crashes with the sample script on a Debian/wheezy system, and it seems to affect all perl versions. Here's a list of number of crashes -> perl version:

$ sort /tmp/blacrashes.log | uniq -c 4 /opt/perl-5.10.1/bin/perl crashed 2 /opt/perl-5.12.5/bin/perl crashed 6 /opt/perl-5.14.4/bin/perl crashed 6 /opt/perl-5.16.3/bin/perl crashed 6 /opt/perl-5.18.2/bin/perl crashed 6 /opt/perl-5.18.2t/bin/perl crashed 6 /opt/perl-5.18.3-RC1/bin/perl crashed 6 /opt/perl-5.18.4/bin/perl crashed 6 /opt/perl-5.18.4t/bin/perl crashed 1 /opt/perl-5.19.11/bin/perl crashed 1 /opt/perl-5.20.0-RC1/bin/perl crashed 2 /opt/perl-5.20.0/bin/perl crashed 2 /opt/perl-5.20.0t/bin/perl crashed 3 /opt/perl-5.20.1-RC1/bin/perl crashed 1 /opt/perl-5.20.1-RC2/bin/perl crashed 2 /opt/perl-5.20.1/bin/perl crashed 6 /opt/perl-5.20.1d/bin/perl crashed 3 /opt/perl-5.21.3/bin/perl crashed 4 /opt/perl-5.21.4/bin/perl crashed 1 /opt/perl-5.21.5/bin/perl crashed 6 /opt/perl-5.21.6/bin/perl crashed