]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 383745: Incorrect charset specification in "please wait" screen when server push...
authorwurblzap%gmail.com <>
Fri, 22 Jun 2007 12:29:24 +0000 (12:29 +0000)
committerwurblzap%gmail.com <>
Fri, 22 Jun 2007 12:29:24 +0000 (12:29 +0000)
Patch by Marc Schumann <wurblzap@gmail.com>,
r=mkanat, a=mkanat

Bugzilla/CGI.pm
buglist.cgi

index 7b76f6af090a9209213e1cfd698cd33f3309ce29..b4e2aca6ca6ba0067147ff2ed1a791d17db66d9e 100644 (file)
@@ -194,13 +194,13 @@ sub multipart_start {
     
     my %args = @_;
 
-    # CGI.pm::multipart_start doesn't accept a -charset parameter, so
+    # CGI.pm::multipart_start doesn't honour its own charset information, so
     # we do it ourselves here
-    if (defined $args{-charset} && defined $args{-type}) {
+    if (defined $self->charset() && defined $args{-type}) {
         # Remove any existing charset specifier
         $args{-type} =~ s/;.*$//;
         # and add the specified one
-        $args{-type} .= "; charset=$args{-charset}";
+        $args{-type} .= '; charset=' . $self->charset();
     }
         
     my $headers = $self->SUPER::multipart_start(%args);
index 6d47b69f99aa040211ed6cfa4be790cba62cb106..6c7f9a4515d54174c1e6dcbadc8bab0b9c01b942 100755 (executable)
@@ -397,6 +397,8 @@ if ($cgi->param('cmdtype') eq "dorem" && $cgi->param('remaction') =~ /^run/) {
     # with the HTTP headers.
     $filename =~ s/\s/_/g;
 }
+$filename =~ s/\\/\\\\/g; # escape backslashes
+$filename =~ s/"/\\"/g; # escape quotes
 
 # Take appropriate action based on user's request.
 if ($cgi->param('cmdtype') eq "dorem") {  
@@ -957,14 +959,9 @@ if ($cgi->param('debug')) {
 
 # Time to use server push to display an interim message to the user until
 # the query completes and we can display the bug list.
-my $disposition = '';
 if ($serverpush) {
-    $filename =~ s/\\/\\\\/g; # escape backslashes
-    $filename =~ s/"/\\"/g; # escape quotes
-    $disposition = qq#inline; filename="$filename"#;
-
-    print $cgi->multipart_init(-content_disposition => $disposition);
-    print $cgi->multipart_start();
+    print $cgi->multipart_init();
+    print $cgi->multipart_start(-type => 'text/html');
 
     # Generate and return the UI (HTML page) from the appropriate template.
     $template->process("list/server-push.html.tmpl", $vars)
@@ -1189,7 +1186,7 @@ $vars->{'defaultsavename'} = $cgi->param('query_based_on');
 # Generate HTTP headers
 
 my $contenttype;
-my $disp = "inline";
+my $disposition = "inline";
 
 if ($format->{'extension'} eq "html" && !$agent) {
     if ($order) {
@@ -1221,23 +1218,21 @@ else {
 if ($format->{'extension'} eq "csv") {
     # We set CSV files to be downloaded, as they are designed for importing
     # into other programs.
-    $disp = "attachment";
+    $disposition = "attachment";
 }
 
+# Suggest a name for the bug list if the user wants to save it as a file.
+$disposition .= "; filename=\"$filename\"";
+
 if ($serverpush) {
-    # close the "please wait" page, then open the buglist page
+    # Close the "please wait" page, then open the buglist page
     print $cgi->multipart_end();
-    my @extra;
-    push @extra, (-charset => "utf8") if Bugzilla->params->{"utf8"};
-    print $cgi->multipart_start(-type => $contenttype, 
-                                -content_disposition => $disposition, 
-                                @extra);
-} else {
-    # Suggest a name for the bug list if the user wants to save it as a file.
-    # If we are doing server push, then we did this already in the HTTP headers
-    # that started the server push, so we don't have to do it again here.
-    print $cgi->header(-type => $contenttype,
-                       -content_disposition => "$disp; filename=$filename");
+    print $cgi->multipart_start(-type                => $contenttype,
+                                -content_disposition => $disposition);
+}
+else {
+    print $cgi->header(-type                => $contenttype,
+                       -content_disposition => $disposition);
 }