summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Object.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/Object.pm')
-rw-r--r--Bugzilla/Object.pm15
1 files changed, 11 insertions, 4 deletions
diff --git a/Bugzilla/Object.pm b/Bugzilla/Object.pm
index ba5b82f9f..67517c405 100644
--- a/Bugzilla/Object.pm
+++ b/Bugzilla/Object.pm
@@ -316,13 +316,20 @@ sub set {
sub set_all {
my ($self, $params) = @_;
- my @sorted_names = $self->_sort_by_dep(keys %$params);
+ # Don't let setters modify the values in $params for the caller.
+ my %field_values = %$params;
+
+ my @sorted_names = $self->_sort_by_dep(keys %field_values);
foreach my $key (@sorted_names) {
+ # It's possible for one set_ method to delete a key from $params
+ # for another set method, so if that's happened, we don't call the
+ # other set method.
+ next if !exists $field_values{$key};
my $method = "set_$key";
- $self->$method($params->{$key});
+ $self->$method($field_values{$key}, \%field_values);
}
- Bugzilla::Hook::process('object_end_of_set_all', { object => $self,
- params => $params });
+ Bugzilla::Hook::process('object_end_of_set_all',
+ { object => $self, params => \%field_values });
}
sub update {