From 914fb1e84d015ab400fe16e8a03ce7e552af9a05 Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Sat, 4 Jul 2009 12:14:50 +0000 Subject: Bug 501538: Make $cgi->param() also check GET variables during a POST, so that POST forms with query-string variables in the target (like the login form) work correctly. Patch by Max Kanat-Alexander r=LpSolit, a=LpSolit --- Bugzilla/CGI.pm | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Bugzilla/CGI.pm b/Bugzilla/CGI.pm index 4af6a933d..5a50dbbeb 100644 --- a/Bugzilla/CGI.pm +++ b/Bugzilla/CGI.pm @@ -276,17 +276,28 @@ sub header { return $self->SUPER::header(@_) || ""; } -# CGI.pm is not utf8-aware and passes data as bytes instead of UTF-8 strings. sub param { my $self = shift; - if (Bugzilla->params->{'utf8'} && scalar(@_) == 1) { - if (wantarray) { - return map { _fix_utf8($_) } $self->SUPER::param(@_); + + # When we are just requesting the value of a parameter... + if (scalar(@_) == 1) { + my @result = $self->SUPER::param(@_); + + # Also look at the URL parameters, after we look at the POST + # parameters. This is to allow things like login-form submissions + # with URL parameters in the form's "target" attribute. + if (!scalar(@result) && $self->request_method eq 'POST') { + @result = $self->SUPER::url_param(@_); } - else { - return _fix_utf8(scalar $self->SUPER::param(@_)); + + # Fix UTF-8-ness of input parameters. + if (Bugzilla->params->{'utf8'}) { + @result = map { _fix_utf8($_) } @result; } + + return wantarray ? @result : $result[0]; } + return $self->SUPER::param(@_); } -- cgit v1.2.3-24-g4f1b