This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix off-by-one when restoring hashes [perl #73972]
[perl5.git] / dist / Storable / t / restrict.t
index 65dac6f..a8a9d81 100644 (file)
@@ -36,7 +36,7 @@ sub BEGIN {
 
 use Storable qw(dclone freeze thaw);
 use Hash::Util qw(lock_hash unlock_value lock_keys);
-use Test::More tests => 104;
+use Test::More tests => 304;
 
 my %hash = (question => '?', answer => 42, extra => 'junk', undef => undef);
 lock_hash %hash;
@@ -118,3 +118,24 @@ for $Storable::canonical (0, 1) {
     ok eval { $$hv2{a} = 70 }, 'COWs do not become read-only';
   }
 }
+
+# [perl #73972]
+{
+    for my $n (1..100) {
+        my @keys = map { "FOO$_" } (1..$n);
+
+        my $hash1 = {};
+        lock_keys(%$hash1, @keys);
+        my $hash2 = dclone($hash1);
+
+        my $success;
+
+        $success = eval { $hash2->{$_} = 'test' for @keys; 1 };
+        my $err = $@;
+        ok($success, "can store in all of the $n restricted slots")
+            || diag("failed with $@");
+
+        $success = !eval { $hash2->{a} = 'test'; 1 };
+        ok($success, "the hash is still restricted");
+    }
+}