diff options
Diffstat (limited to 'Bugzilla/CGI.pm')
-rw-r--r-- | Bugzilla/CGI.pm | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/Bugzilla/CGI.pm b/Bugzilla/CGI.pm index b4bcf20c8..dd6061346 100644 --- a/Bugzilla/CGI.pm +++ b/Bugzilla/CGI.pm @@ -158,14 +158,27 @@ sub multipart_init { # CGI.pm's header() sets nph according to a param or $CGI::NPH, which # is the desired behaviour. - # Allow multiple calls to $cgi->header() - $CGI::HEADERS_ONCE = 0; - return $self->header( %param, ) . "WARNING: YOUR BROWSER DOESN'T SUPPORT THIS SERVER-PUSH TECHNOLOGY." . $self->multipart_end; } +# Have to add the cookies in. +sub multipart_start { + my $self = shift; + my $headers = $self->SUPER::multipart_start(@_); + # Eliminate the one extra CRLF at the end. + $headers =~ s/$CGI::CRLF$//; + # Add the cookies. We have to do it this way instead of + # passing them to multpart_start, because CGI.pm's multipart_start + # doesn't understand a '-cookie' argument pointing to an arrayref. + foreach my $cookie (@{$self->{Bugzilla_cookie_list}}) { + $headers .= "Set-Cookie: ${cookie}${CGI::CRLF}"; + } + $headers .= $CGI::CRLF; + return $headers; +} + # Override header so we can add the cookies in sub header { my $self = shift; @@ -183,13 +196,6 @@ sub header { return $self->SUPER::header(@_) || ""; } -# Override multipart_start to ensure our cookies are added and avoid bad quoting of -# CGI's multipart_start (bug 275108) -sub multipart_start { - my $self = shift; - return $self->header(@_); -} - # The various parts of Bugzilla which create cookies don't want to have to # pass them around to all of the callers. Instead, store them locally here, # and then output as required from |header|. |