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;
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);
lock_hash (%hash);
unlock_hash(%hash);
- my $hashes_are_randomised = hash_seed() != 0;
+ my $hashes_random = hashes_random();
=head1 DESCRIPTION
}
-=item B<hash_seed>
+=item B<hashes_random>
- 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
chdir 't';
}
}
-use Test::More tests => 157;
+use Test::More tests => 155;
use strict;
my @Exported_Funcs;
}
}
-my $hash_seed = hash_seed();
-ok($hash_seed >= 0, "hash_seed $hash_seed");
ordering of the results of keys(), values(), and each().
See L<perlsec/"Algorithmic Complexity Attacks"> for more information,
-and also L</PERL_HASH_SEED>.
+and also L</PERL_HASH_SEED_DEBUG>.
=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<Hash::Util>.
+(Since Perl 5.8.1.) Set to one to display (to STDERR) the value of
+the hash seed at the beginning of execution. B<Note that the hash
+seed is sensitive information>: by knowing it one can craft a
+denial-of-service attack against Perl code, even remotely, see
+L<perlsec/"Algorithmic Complexity Attacks"> for more information.
+B<Do not disclose the hash seed> to people who don't need to know it.
+See also hashes_random() of L<Hash::Util>.
=item PERL_ROOT (specific to the VMS port)
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)
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, "");
}
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);
}