summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/CGI.pm26
-rwxr-xr-xbuglist.cgi6
2 files changed, 22 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|.
diff --git a/buglist.cgi b/buglist.cgi
index 1a7ffc316..1400968fc 100755
--- a/buglist.cgi
+++ b/buglist.cgi
@@ -884,6 +884,12 @@ if ($serverpush) {
$template->process("list/server-push.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
+ # Under mod_perl, flush stdout so that the page actually shows up.
+ if ($ENV{MOD_PERL}) {
+ require Apache2::RequestUtil;
+ Apache2::RequestUtil->request->rflush();
+ }
+
# Don't do multipart_end() until we're ready to display the replacement
# page, otherwise any errors that happen before then (like SQL errors)
# will result in a blank page being shown to the user instead of the error.