summaryrefslogtreecommitdiff
path: root/bin/MakeProjectCreator/modules/Creator.pm
diff options
context:
space:
mode:
Diffstat (limited to 'bin/MakeProjectCreator/modules/Creator.pm')
-rw-r--r--bin/MakeProjectCreator/modules/Creator.pm15
1 files changed, 13 insertions, 2 deletions
diff --git a/bin/MakeProjectCreator/modules/Creator.pm b/bin/MakeProjectCreator/modules/Creator.pm
index 6d9d8c60f74..71e6bfecf3d 100644
--- a/bin/MakeProjectCreator/modules/Creator.pm
+++ b/bin/MakeProjectCreator/modules/Creator.pm
@@ -617,9 +617,20 @@ sub restore_state {
my($self) = shift;
my($state) = shift;
- ## Overwrite each state value
+ ## Make a deep copy of each state value. That way our array
+ ## references and hash references do not get accidentally modified.
foreach my $skey (@statekeys) {
- $self->{$skey} = $$state{$skey};
+ if (UNIVERSAL::isa($state->{$skey}, 'ARRAY')) {
+ my(@arr) = @{$state->{$skey}};
+ $self->{$skey} = \@arr;
+ }
+ elsif (UNIVERSAL::isa($state->{$skey}, 'HASH')) {
+ my(%hash) = %{$state->{$skey}};
+ $self->{$skey} = \%hash;
+ }
+ else {
+ $self->{$skey} = $state->{$skey};
+ }
}
}