/* Implementation of restricted hashes isn't nicely
abstracted: */
- if ((hash_flags & SHV_RESTRICTED) && SvREADONLY(val)) {
+ if ((hash_flags & SHV_RESTRICTED)
+ && SvREADONLY(val) && !SvIsCOW(val)) {
flags |= SHV_K_LOCKED;
}
abstracted: */
flags
= (((hash_flags & SHV_RESTRICTED)
- && SvREADONLY(val))
+ && SvREADONLY(val) && !SvIsCOW(val))
? SHV_K_LOCKED : 0);
if (val == &PL_sv_placeholder) {
use Storable qw(dclone freeze thaw);
use Hash::Util qw(lock_hash unlock_value);
-use Test::More tests => 100;
+use Test::More tests => 104;
my %hash = (question => '?', answer => 42, extra => 'junk', undef => undef);
lock_hash %hash;
eval { $copy->{$k} = undef } ;
is($@, '', "Can assign to reserved key '$k'?");
}
+
+ my %hv;
+ $hv{a} = __PACKAGE__;
+ lock_hash %hv;
+ my $hv2 = &$cloner(\%hv);
+ ok eval { $$hv2{a} = 70 }, 'COWs do not become read-only';
}
}