From: Jarkko Hietaniemi Date: Mon, 8 Sep 2003 17:58:19 +0000 (+0000) Subject: Scott A. Crosby believes in not disclosing X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=e67b9e528630fa842f677b067da8b404fc3914ab;p=p5sagit%2Fp5-mst-13.2.git Scott A. Crosby believes in not disclosing any more information than necessary: therefore instead of hash_seed() we have now hashes_random(). p4raw-id: //depot/perl@21096 --- diff --git a/lib/Hash/Util.pm b/lib/Hash/Util.pm index 8e8c952..7c528a2 100644 --- a/lib/Hash/Util.pm +++ b/lib/Hash/Util.pm @@ -7,7 +7,7 @@ use Carp; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(lock_keys unlock_keys lock_value unlock_value - lock_hash unlock_hash hash_seed + lock_hash unlock_hash hashes_random ); our $VERSION = 0.05; @@ -20,7 +20,7 @@ Hash::Util - A selection of general-utility hash subroutines use Hash::Util qw(lock_keys unlock_keys lock_value unlock_value lock_hash unlock_hash - hash_seed); + hashes_random); %hash = (foo => 42, bar => 23); lock_keys(%hash); @@ -33,7 +33,7 @@ Hash::Util - A selection of general-utility hash subroutines lock_hash (%hash); unlock_hash(%hash); - my $hashes_are_randomised = hash_seed() != 0; + my $hashes_random = hashes_random(); =head1 DESCRIPTION @@ -179,18 +179,18 @@ sub unlock_hash (\%) { } -=item B +=item B - my $hash_seed = hash_seed(); + my $hashes_random = hashes_random(); -hash_seed() returns the seed number used to randomise hash ordering. -Zero means the "traditional" random hash ordering, non-zero means the -new even more random hash ordering introduced in Perl 5.8.1. +hashes_random() returns true if Perl hashes are randomised as in Perl +5.8.1 and later, false if Perl hashes have a predictable order as in +Perl 5.8.0 and earlier. =cut -sub hash_seed () { - Internals::hash_seed(); +sub hashes_random () { + Internals::hashes_random(); } =back diff --git a/lib/Hash/Util.t b/lib/Hash/Util.t index 7cffcbe..512f07c 100644 --- a/lib/Hash/Util.t +++ b/lib/Hash/Util.t @@ -6,7 +6,7 @@ BEGIN { chdir 't'; } } -use Test::More tests => 157; +use Test::More tests => 155; use strict; my @Exported_Funcs; @@ -274,5 +274,3 @@ like( $@, qr/^Attempt to access disallowed key 'I_DONT_EXIST' in a restricted ha } } -my $hash_seed = hash_seed(); -ok($hash_seed >= 0, "hash_seed $hash_seed"); diff --git a/pod/perlrun.pod b/pod/perlrun.pod index f8a0ae6..299cbf9 100644 --- a/pod/perlrun.pod +++ b/pod/perlrun.pod @@ -1140,13 +1140,17 @@ This means that each different run of Perl will have a different ordering of the results of keys(), values(), and each(). See L for more information, -and also L. +and also L. =item PERL_HASH_SEED_DEBUG -(Since Perl 5.8.1.) Set to "1" to display (to STDERR) the value of -the hash seed at the beginning of execution. -See also hash_seed() of L. +(Since Perl 5.8.1.) Set to one to display (to STDERR) the value of +the hash seed at the beginning of execution. B: by knowing it one can craft a +denial-of-service attack against Perl code, even remotely, see +L for more information. +B to people who don't need to know it. +See also hashes_random() of L. =item PERL_ROOT (specific to the VMS port) diff --git a/universal.c b/universal.c index 15c408d..dc9e253 100644 --- a/universal.c +++ b/universal.c @@ -187,7 +187,7 @@ XS(XS_Internals_SvREFCNT); XS(XS_Internals_hv_clear_placehold); XS(XS_PerlIO_get_layers); XS(XS_Regexp_DESTROY); -XS(XS_Internals_hash_seed); +XS(XS_Internals_hashes_random); void Perl_boot_core_UNIVERSAL(pTHX) @@ -231,7 +231,7 @@ Perl_boot_core_UNIVERSAL(pTHX) newXSproto("PerlIO::get_layers", XS_PerlIO_get_layers, file, "*;@"); newXS("Regexp::DESTROY", XS_Regexp_DESTROY, file); - newXSproto("Internals::hash_seed",XS_Internals_hash_seed, file, ""); + newXSproto("Internals::hashes_random",XS_Internals_hashes_random, file, ""); } @@ -908,9 +908,9 @@ XS(XS_PerlIO_get_layers) XSRETURN(0); } -XS(XS_Internals_hash_seed) +XS(XS_Internals_hashes_random) { dXSARGS; - XSRETURN_UV(PL_hash_seed); + XSRETURN_IV(PL_hash_seed ? 1 : 0); }