http://www.perlmonks.org?node_id=301633

Hi, this is just a heads up about a bug report I just filed to p5p and the maintainer of Data::Dumper. If you set $Data::Dumper::Sortkeys=1 and do not set $Data::Dumper::Useperl=1 under 5.6.1 (win32 at least) you will end up with either erroneous data or a segfault. If you set both at the same time this problem doesnt arise.

Note that this bug does not appear to affect 5.8.0 at all.

use Data::Dumper; use strict; use warnings; $|++; printf "D::D version %s\n",Data::Dumper->VERSION; for my $sk (0,1) { print "\$Data::Dumper::Sortkeys=$sk\n"; $Data::Dumper::Sortkeys=$sk; for my $up (1,0) { print "\$Data::Dumper::Useperl=$up\n"; $Data::Dumper::Useperl=$up; my %rev; my %name; print "Dumper:\n",Dumper(\%rev,\%name),"\n"; } } print "Done\n"; __END__ D::D version 2.121 $Data::Dumper::Sortkeys=0 $Data::Dumper::Useperl=1 Dumper: $VAR1 = {}; $VAR2 = {}; $Data::Dumper::Useperl=0 Dumper: $VAR1 = {}; $VAR2 = {}; $Data::Dumper::Sortkeys=1 $Data::Dumper::Useperl=1 Dumper: $VAR1 = {}; $VAR2 = {}; $Data::Dumper::Useperl=0 Use of uninitialized value in print at c:\temp\test_dd.pl line 15. Dumper: $VAR2 = {};

I post this only as a public service, as I know many people here depend on DD in many ways, and this is a serious bug that is not picked up by the test suite.

Cheers,


---
demerphq

    First they ignore you, then they laugh at you, then they fight you, then you win.
    -- Gandhi


Replies are listed 'Best First'.
Re: Serious Bug in latest Data::Dumper under 5.6.1
by simonflk (Pilgrim) on Oct 24, 2003 at 17:19 UTC

    I get the segfault with perl 5.6.1 on solaris. But strangely, if I change the line:

    print "Dumper:\n",Dumper(\%rev,\%name),"\n";

    to:

    my $dumped = Dumper(\%rev,\%name); print "Dumper:\n",$dumped,"\n";

    It works fine. I can't see why that should make any difference.

    -- simonflk

    Update:

    simonf$ perl -MData::Dumper -le 'print Data::Dumper->VERSION' 2.12_01

    Update: Tested on Win32, with ActiveState's D::D 2.121 PPM. Same behaviour - using Dumper() in scalar context avoids segfault.

Re: Serious Bug in latest Data::Dumper under 5.6.1
by IlyaM (Parson) on Oct 27, 2003 at 12:40 UTC
    Similar problem can be reproduced on perl 5.8.0 too. Minimal test case:
    use Data::Dumper; $Data::Dumper::Sortkeys = sub { [ sort keys %{$_[0]} ] }; print Dumper({}, {});

    --
    Ilya Martynov, ilya@iponweb.net
    CTO IPonWEB (UK) Ltd
    Quality Perl Programming and Unix Support UK managed @ offshore prices - http://www.iponweb.net
    Personal website - http://martynov.org