From: jocuri%softhome.net <> Date: Mon, 23 Feb 2004 02:52:05 +0000 (+0000) Subject: Patch for bug 226251 (internal error when server push is enabled): Due to randomizati... X-Git-Tag: bugzilla-2.17.7~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ddabefad38f1fe6fc0343869a46bb7c8fa137d8;p=thirdparty%2Fbugzilla.git Patch for bug 226251 (internal error when server push is enabled): Due to randomization of perl hash table functionality since 5.8.1 the 'hack' to unset the nph parameter for multipart messages is not working reliable, instead a modified clone of the original multipart_init function is setting this parameter to '0' and is ignoring the given nph parameter from buglist.cgi; patch by Stephen Reindl ; r=bbaetz; a=justdave. --- diff --git a/Bugzilla/CGI.pm b/Bugzilla/CGI.pm index 2ffd35aadd..763f418e9f 100644 --- a/Bugzilla/CGI.pm +++ b/Bugzilla/CGI.pm @@ -23,7 +23,7 @@ use strict; package Bugzilla::CGI; -use CGI qw(-no_xhtml -oldstyle_urls :private_tempfiles :unique_headers); +use CGI qw(-no_xhtml -oldstyle_urls :private_tempfiles :unique_headers SERVER_PUSH); use CGI::Util qw(rearrange); use base qw(CGI); @@ -111,13 +111,21 @@ sub canonicalise_query { return join("&", @parameters); } -# CGI.pm makes this nph, but apache doesn't like that +# Overwrite to handle nph parameter. This should stay here until perl 5.8.1 CGI +# has been fixed to support -nph as a parameter +# sub multipart_init { - my $self = shift; - - unshift(@_, '-nph' => undef); - - return $self->SUPER::multipart_init(@_); + my($self,@p) = @_; + my($boundary,$nph,@other) = rearrange(['BOUNDARY','NPH'],@p); + $boundary = $boundary || '------- =_aaaaaaaaaa0'; + $self->{'separator'} = "\r\n--$boundary$\r\n"; + $self->{'final_separator'} = "\r\n--$boundary--\r\n"; + my $type = SERVER_PUSH($boundary); + return $self->header( + -nph => 0, + -type => $type, + (map { split "=", $_, 2 } @other), + ) . "WARNING: YOUR BROWSER DOESN'T SUPPORT THIS SERVER-PUSH TECHNOLOGY." . $self->multipart_end; } # Override header so we can add the cookies in