From d024ba28ca77af8922eee144351bdaf1350cf5a9 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Thu, 26 Jul 2007 15:52:48 +0000 Subject: [PATCH] =?utf8?q?Bug=20377913:=20Crash=20when=20setting=20a=20req?= =?utf8?q?uestee=20for=20a=20deleted=20flag=20(race=20condition)=20-=20Pat?= =?utf8?q?ch=20by=20Fr=C3=83=C2=A9d=C3=83=C2=A9ric=20Buclin=20=20r=3Dwicked=20a=3DLpSolit?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Bugzilla/User.pm | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm index be56fa9378..ae0505323b 100644 --- a/Bugzilla/User.pm +++ b/Bugzilla/User.pm @@ -1142,16 +1142,26 @@ sub match_field { # The field is a requestee field; in order for its name # to show up correctly on the confirmation page, we need # to find out the name of its flag type. - if ($field_name =~ /^requestee-(\d+)$/) { - require Bugzilla::Flag; - my $flag = new Bugzilla::Flag($1); - $expanded_fields->{$field_name}->{'flag_type'} = - $flag->type; - } - elsif ($field_name =~ /^requestee_type-(\d+)$/) { - require Bugzilla::FlagType; - $expanded_fields->{$field_name}->{'flag_type'} = - new Bugzilla::FlagType($1); + if ($field_name =~ /^requestee(_type)?-(\d+)$/) { + my $flag_type; + if ($1) { + require Bugzilla::FlagType; + $flag_type = new Bugzilla::FlagType($2); + } + else { + require Bugzilla::Flag; + my $flag = new Bugzilla::Flag($2); + $flag_type = $flag->type if $flag; + } + if ($flag_type) { + $expanded_fields->{$field_name}->{'flag_type'} = $flag_type; + } + else { + # No need to look for a valid requestee if the flag(type) + # has been deleted (may occur in race conditions). + delete $expanded_fields->{$field_name}; + $cgi->delete($field_name); + } } } } -- 2.47.2