diff --git a/lib/msf/core/data_store.rb b/lib/msf/core/data_store.rb index 5de4ff7e85..27cd0f55fa 100644 --- a/lib/msf/core/data_store.rb +++ b/lib/msf/core/data_store.rb @@ -212,22 +212,6 @@ class DataStore < Hash self end - # - # Return a deep copy of this datastore. - # - def copy - copy = self.dup - self.keys.each do |k| - if self[k].kind_of? String - v = self[k].dup - else - v = self[k] - end - copy.import_option(k, v, @imported[k], @imported_by[k]) - end - copy - end - protected # @@ -297,6 +281,16 @@ class ModuleDataStore < DataStore (@imported_by[key] == 'self') end + # + # Return a deep copy of this datastore. + # + def copy + clone = self.class.new(@_module) + self.keys.each do |k| + clone.import_option(k, self[k].kind_of?(String) ? self[k].dup : self[k], @imported[k], @imported_by[k]) + end + clone + end end end diff --git a/lib/msf/core/module.rb b/lib/msf/core/module.rb index 28ef5514bb..598959f476 100644 --- a/lib/msf/core/module.rb +++ b/lib/msf/core/module.rb @@ -151,7 +151,7 @@ class Module # Creates a fresh copy of an instantiated module # def replicant - obj = self.dup + obj = self.class.new obj.generate_uuid obj.datastore = self.datastore.copy obj.user_input = self.user_input