diff options
Diffstat (limited to 'ext/Data')
-rw-r--r-- | ext/Data/Dumper/Dumper.pm | 12 | ||||
-rwxr-xr-x | ext/Data/Dumper/t/dumper.t | 100 |
2 files changed, 62 insertions, 50 deletions
diff --git a/ext/Data/Dumper/Dumper.pm b/ext/Data/Dumper/Dumper.pm index f51b2438d6..c00b218f2a 100644 --- a/ext/Data/Dumper/Dumper.pm +++ b/ext/Data/Dumper/Dumper.pm @@ -1193,6 +1193,17 @@ XSUB implementation does not support them. SCALAR objects have the weirdest looking C<bless> workaround. +=head2 NOTE + +Starting from Perl 5.8.1 different runs of Perl will have different +ordering of hash keys. The change was done for greater security, +see L<perlsec/"Algorithmic Complexity Attacks">. This means that +different runs of Perl will have different Data::Dumper outputs if +the data contains hashes. If you need to have identical Data::Dumper +outputs from different runs of Perl, use the environment variable +PERL_HASH_SEED, see L<perlrun/PERL_HASH_SEED>. Using this restores +the old (platform-specific) ordering: an even prettier solution might +be to use the C<Sortkeys> filter of Data::Dumper. =head1 AUTHOR @@ -1202,7 +1213,6 @@ Copyright (c) 1996-98 Gurusamy Sarathy. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - =head1 VERSION Version 2.12 (unreleased) diff --git a/ext/Data/Dumper/t/dumper.t b/ext/Data/Dumper/t/dumper.t index e1de62dd8a..766343902c 100755 --- a/ext/Data/Dumper/t/dumper.t +++ b/ext/Data/Dumper/t/dumper.t @@ -13,6 +13,9 @@ BEGIN { } } +# Since Perl 5.8.1 because otherwise hash ordering is really random. +local $Data::Dumper::Sortkeys = 1; + use Data::Dumper; use Config; my $Is_ebcdic = defined($Config{'ebcdic'}) && $Config{'ebcdic'} eq 'define'; @@ -94,11 +97,11 @@ $WANT = <<'EOT'; #$a = [ # 1, # { +# 'a' => $a, +# 'b' => $a->[1], # 'c' => [ # 'c' -# ], -# 'a' => $a, -# 'b' => $a->[1] +# ] # }, # $a->[1]{'c'} # ]; @@ -116,11 +119,11 @@ $WANT = <<'EOT'; #@a = ( # 1, # { +# 'a' => [], +# 'b' => {}, # 'c' => [ # 'c' -# ], -# 'a' => [], -# 'b' => {} +# ] # }, # [] # ); @@ -138,19 +141,19 @@ TEST q(Data::Dumper->Dumpxs([$a, $b], [qw(*a b)])) if $XS; ## $WANT = <<'EOT'; #%b = ( -# 'c' => [ -# 'c' -# ], # 'a' => [ # 1, # {}, -# [] +# [ +# 'c' +# ] # ], -# 'b' => {} +# 'b' => {}, +# 'c' => [] # ); #$b{'a'}[1] = \%b; -#$b{'a'}[2] = $b{'c'}; #$b{'b'} = \%b; +#$b{'c'} = $b{'a'}[2]; #$a = $b{'a'}; EOT @@ -163,15 +166,15 @@ $WANT = <<'EOT'; #$a = [ # 1, # { -# 'c' => [], # 'a' => [], -# 'b' => {} +# 'b' => {}, +# 'c' => [] # }, # [] #]; -#$a->[1]{'c'} = \@c; #$a->[1]{'a'} = $a; #$a->[1]{'b'} = $a->[1]; +#$a->[1]{'c'} = \@c; #$a->[2] = \@c; #$b = $a->[1]; EOT @@ -199,12 +202,12 @@ $WANT = <<'EOT'; # 1, # #1 # { +# a => $a, +# b => $a->[1], # c => [ # #0 # 'c' -# ], -# a => $a, -# b => $a->[1] +# ] # }, # #2 # $a->[1]{c} @@ -224,11 +227,11 @@ $WANT = <<'EOT'; #$VAR1 = [ # 1, # { +# 'a' => [], +# 'b' => {}, # 'c' => [ # 'c' -# ], -# 'a' => [], -# 'b' => {} +# ] # }, # [] #]; @@ -246,11 +249,11 @@ $WANT = <<'EOT'; #[ # 1, # { +# a => $VAR1, +# b => $VAR1->[1], # c => [ # 'c' -# ], -# a => $VAR1, -# b => $VAR1->[1] +# ] # }, # $VAR1->[1]{c} #] @@ -269,8 +272,8 @@ EOT ## $WANT = <<'EOT'; #$VAR1 = { -# "reftest" => \\1, -# "abc\0'\efg" => "mno\0" +# "abc\0'\efg" => "mno\0", +# "reftest" => \\1 #}; EOT @@ -284,8 +287,8 @@ $foo = { "abc\000\'\efg" => "mno\000", $WANT = <<"EOT"; #\$VAR1 = { -# 'reftest' => \\\\1, -# 'abc\0\\'\efg' => 'mno\0' +# 'abc\0\\'\efg' => 'mno\0', +# 'reftest' => \\\\1 #}; EOT @@ -320,15 +323,15 @@ EOT # do{my $o}, # #2 # { -# 'c' => [], # 'a' => 1, # 'b' => do{my $o}, +# 'c' => [], # 'd' => {} # } # ]; #*::foo{ARRAY}->[1] = $foo; -#*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY}; #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR}; +#*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY}; #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2]; #*::foo = *::foo{ARRAY}->[2]; #@bar = @{*::foo{ARRAY}}; @@ -349,15 +352,15 @@ EOT # -10, # do{my $o}, # { -# 'c' => [], # 'a' => 1, # 'b' => do{my $o}, +# 'c' => [], # 'd' => {} # } #]; #*::foo{ARRAY}->[1] = $foo; -#*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY}; #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR}; +#*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY}; #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2]; #*::foo = *::foo{ARRAY}->[2]; #$bar = *::foo{ARRAY}; @@ -379,13 +382,13 @@ EOT #*::foo = \5; #*::foo = \@bar; #*::foo = { -# 'c' => [], # 'a' => 1, # 'b' => do{my $o}, +# 'c' => [], # 'd' => {} #}; -#*::foo{HASH}->{'c'} = \@bar; #*::foo{HASH}->{'b'} = *::foo{SCALAR}; +#*::foo{HASH}->{'c'} = \@bar; #*::foo{HASH}->{'d'} = *::foo{HASH}; #$bar[2] = *::foo{HASH}; #%baz = %{*::foo{HASH}}; @@ -406,13 +409,13 @@ EOT #*::foo = \5; #*::foo = $bar; #*::foo = { -# 'c' => [], # 'a' => 1, # 'b' => do{my $o}, +# 'c' => [], # 'd' => {} #}; -#*::foo{HASH}->{'c'} = $bar; #*::foo{HASH}->{'b'} = *::foo{SCALAR}; +#*::foo{HASH}->{'c'} = $bar; #*::foo{HASH}->{'d'} = *::foo{HASH}; #$bar->[2] = *::foo{HASH}; #$baz = *::foo{HASH}; @@ -430,9 +433,9 @@ EOT # -10, # $foo, # { -# c => \@bar, # a => 1, # b => \5, +# c => \@bar, # d => $bar[2] # } #); @@ -452,9 +455,9 @@ EOT # -10, # $foo, # { -# c => $bar, # a => 1, # b => \5, +# c => $bar, # d => $bar->[2] # } #]; @@ -483,8 +486,8 @@ EOT ## $WANT = <<'EOT'; #%kennels = ( -# Second => \'Wags', -# First => \'Fido' +# First => \'Fido', +# Second => \'Wags' #); #@dogs = ( # ${$kennels{First}}, @@ -522,8 +525,8 @@ EOT ## $WANT = <<'EOT'; #%kennels = ( -# Second => \'Wags', -# First => \'Fido' +# First => \'Fido', +# Second => \'Wags' #); #@dogs = ( # ${$kennels{First}}, @@ -546,8 +549,8 @@ EOT # 'Fido', # 'Wags', # { -# Second => \$dogs[1], -# First => \$dogs[0] +# First => \$dogs[0], +# Second => \$dogs[1] # } #); #%kennels = %{$dogs[2]}; @@ -581,13 +584,13 @@ EOT # 'Fido', # 'Wags', # { -# Second => \'Wags', -# First => \'Fido' +# First => \'Fido', +# Second => \'Wags' # } #); #%kennels = ( -# Second => \'Wags', -# First => \'Fido' +# First => \'Fido', +# Second => \'Wags' #); EOT @@ -833,7 +836,6 @@ EOT { $i = 0; $a = { map { ("$_$_$_", ++$i) } 'I'..'Q' }; - local $Data::Dumper::Sortkeys = 1; ############# 193 ## |