]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 501538: Make $cgi->param() also check GET variables during a POST, so that POST...
authormkanat%bugzilla.org <>
Sat, 4 Jul 2009 12:16:28 +0000 (12:16 +0000)
committermkanat%bugzilla.org <>
Sat, 4 Jul 2009 12:16:28 +0000 (12:16 +0000)
Patch by Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=LpSolit

Bugzilla/CGI.pm

index d7934f89b5c3cde7e394d477e60eff1f7758dae1..b4966f9e8cabbc76f95464719ca7db0ba873936b 100644 (file)
@@ -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(@_);
 }