Commit 8699690c authored by wurblzap%gmail.com's avatar wurblzap%gmail.com

Bug 383745: Incorrect charset specification in "please wait" screen when server push is in use.

Patch by Marc Schumann <wurblzap@gmail.com>, r=mkanat, a=mkanat
parent 1609f8fc
...@@ -194,13 +194,13 @@ sub multipart_start { ...@@ -194,13 +194,13 @@ sub multipart_start {
my %args = @_; 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 # we do it ourselves here
if (defined $args{-charset} && defined $args{-type}) { if (defined $self->charset() && defined $args{-type}) {
# Remove any existing charset specifier # Remove any existing charset specifier
$args{-type} =~ s/;.*$//; $args{-type} =~ s/;.*$//;
# and add the specified one # and add the specified one
$args{-type} .= "; charset=$args{-charset}"; $args{-type} .= '; charset=' . $self->charset();
} }
my $headers = $self->SUPER::multipart_start(%args); my $headers = $self->SUPER::multipart_start(%args);
......
...@@ -397,6 +397,8 @@ if ($cgi->param('cmdtype') eq "dorem" && $cgi->param('remaction') =~ /^run/) { ...@@ -397,6 +397,8 @@ if ($cgi->param('cmdtype') eq "dorem" && $cgi->param('remaction') =~ /^run/) {
# with the HTTP headers. # with the HTTP headers.
$filename =~ s/\s/_/g; $filename =~ s/\s/_/g;
} }
$filename =~ s/\\/\\\\/g; # escape backslashes
$filename =~ s/"/\\"/g; # escape quotes
# Take appropriate action based on user's request. # Take appropriate action based on user's request.
if ($cgi->param('cmdtype') eq "dorem") { if ($cgi->param('cmdtype') eq "dorem") {
...@@ -957,14 +959,9 @@ if ($cgi->param('debug')) { ...@@ -957,14 +959,9 @@ if ($cgi->param('debug')) {
# Time to use server push to display an interim message to the user until # Time to use server push to display an interim message to the user until
# the query completes and we can display the bug list. # the query completes and we can display the bug list.
my $disposition = '';
if ($serverpush) { if ($serverpush) {
$filename =~ s/\\/\\\\/g; # escape backslashes print $cgi->multipart_init();
$filename =~ s/"/\\"/g; # escape quotes print $cgi->multipart_start(-type => 'text/html');
$disposition = qq#inline; filename="$filename"#;
print $cgi->multipart_init(-content_disposition => $disposition);
print $cgi->multipart_start();
# Generate and return the UI (HTML page) from the appropriate template. # Generate and return the UI (HTML page) from the appropriate template.
$template->process("list/server-push.html.tmpl", $vars) $template->process("list/server-push.html.tmpl", $vars)
...@@ -1189,7 +1186,7 @@ $vars->{'defaultsavename'} = $cgi->param('query_based_on'); ...@@ -1189,7 +1186,7 @@ $vars->{'defaultsavename'} = $cgi->param('query_based_on');
# Generate HTTP headers # Generate HTTP headers
my $contenttype; my $contenttype;
my $disp = "inline"; my $disposition = "inline";
if ($format->{'extension'} eq "html" && !$agent) { if ($format->{'extension'} eq "html" && !$agent) {
if ($order) { if ($order) {
...@@ -1221,23 +1218,21 @@ else { ...@@ -1221,23 +1218,21 @@ else {
if ($format->{'extension'} eq "csv") { if ($format->{'extension'} eq "csv") {
# We set CSV files to be downloaded, as they are designed for importing # We set CSV files to be downloaded, as they are designed for importing
# into other programs. # 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) { 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(); print $cgi->multipart_end();
my @extra; print $cgi->multipart_start(-type => $contenttype,
push @extra, (-charset => "utf8") if Bugzilla->params->{"utf8"}; -content_disposition => $disposition);
print $cgi->multipart_start(-type => $contenttype, }
-content_disposition => $disposition, else {
@extra); print $cgi->header(-type => $contenttype,
} else { -content_disposition => $disposition);
# 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");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment