reftype() used without checking for undef
authorChas. Owens <chas.owens@gmail.com>
Thu, 16 Sep 2010 14:59:30 +0000 (16:59 +0200)
committerSteffen Mueller <smueller@cpan.org>
Thu, 16 Sep 2010 15:02:33 +0000 (17:02 +0200)
Hash::Util used "reftype($v) eq 'HASH'" without checking for
undefinendness. This patch rectifies that. Also bumps Hash::Util
version.

Original patch and detective work by Chas. Owens. Modified by Steffen
Mueller.

ext/Hash-Util/lib/Hash/Util.pm

index 95da7d9..49d38e0 100644 (file)
@@ -29,7 +29,7 @@ our @EXPORT_OK  = qw(
                      hash_seed hv_store
 
                     );
-our $VERSION = '0.08';
+our $VERSION = '0.09';
 require DynaLoader;
 local @ISA = qw(DynaLoader);
 bootstrap Hash::Util $VERSION;
@@ -321,7 +321,8 @@ sub lock_hashref_recurse {
 
     lock_ref_keys($hash);
     foreach my $value (values %$hash) {
-        if (reftype($value) eq 'HASH') {
+        my $type = reftype($value);
+        if (defined($type) and $type eq 'HASH') {
             lock_hashref_recurse($value);
         }
         Internals::SvREADONLY($value,1);
@@ -333,7 +334,8 @@ sub unlock_hashref_recurse {
     my $hash = shift;
 
     foreach my $value (values %$hash) {
-        if (reftype($value) eq 'HASH') {
+        my $type = reftype($value);
+        if (defined($type) and $type eq 'HASH') {
             unlock_hashref_recurse($value);
         }
         Internals::SvREADONLY($value,1);