From b1a24eebebdab3a6fbae9bd8fd99736e130da0a9 Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Tue, 6 Mar 2007 01:29:24 +0000 Subject: Bug 372533: Bugzilla::Object->update throws a warning if some values are undefined Patch By Max Kanat-Alexander r=LpSolit, a=LpSolit --- Bugzilla/Object.pm | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'Bugzilla/Object.pm') diff --git a/Bugzilla/Object.pm b/Bugzilla/Object.pm index 30ecc77e2..ae4fbeebf 100644 --- a/Bugzilla/Object.pm +++ b/Bugzilla/Object.pm @@ -173,15 +173,23 @@ sub update { my (@update_columns, @values, %changes); foreach my $column ($self->UPDATE_COLUMNS) { - if ($old_self->{$column} ne $self->{$column}) { - my $value = $self->{$column}; - trick_taint($value) if defined $value; - push(@values, $value); - push(@update_columns, $column); - # We don't use $value because we don't want to detaint this for - # the caller. - $changes{$column} = [$old_self->{$column}, $self->{$column}]; + my ($old, $new) = ($old_self->{$column}, $self->{$column}); + # This has to be written this way in order to allow us to set a field + # from undef or to undef, and avoid warnings about comparing an undef + # with the "eq" operator. + if (!defined $new || !defined $old) { + next if !defined $new && !defined $old; } + elsif ($old eq $new) { + next; + } + + trick_taint($new) if defined $new; + push(@values, $new); + push(@update_columns, $column); + # We don't use $new because we don't want to detaint this for + # the caller. + $changes{$column} = [$old, $self->{$column}]; } my $columns = join(', ', map {"$_ = ?"} @update_columns); -- cgit v1.2.3-24-g4f1b