Fix Stow to always return safe copies of stowed data.

And test it.
This commit is contained in:
Colin Kuskie 2008-08-02 22:47:15 +00:00
parent 159f2daf60
commit 19987b53b4
2 changed files with 13 additions and 1 deletions

View file

@ -109,6 +109,18 @@ sub get {
my $self = shift;
my $var = shift;
return undef if $self->session->config->get("disableCache");
my $ref = $self->{_data}{$var};
if (ref $ref eq 'ARRAY') {
my @safeArray = @{ $ref };
return \@safeArray;
}
elsif (ref $ref eq 'HASH') {
my %safeHash = %{ $ref };
return \%safeHash;
}
else {
return $ref
}
return $self->{_data}{$var};
}

View file

@ -80,7 +80,7 @@ my $milList = $stow->get("military");
push @{ $milList }, qw/foxtrot echo/;
is_deeply($stow->get("military"), [ @orig_list, qw/foxtrot echo/ ], "modifying fetched list changes stow'ed list because it is a reference");
is_deeply($stow->get("military"), [ @orig_list ], "modifying fetched list does not change original because it is a safe copy");
is($stow->delete(), undef, 'deleting with no key returns undef');
is($stow->delete('noSuchKey'), undef, 'deleting non-existant variable returns undef');