]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 543432: [PostgreSQL] Crash when typing a string in combination with a numeric...
authorFrédéric Buclin <LpSolit@gmail.com>
Thu, 2 Jan 2014 23:04:03 +0000 (00:04 +0100)
committerFrédéric Buclin <LpSolit@gmail.com>
Thu, 2 Jan 2014 23:04:03 +0000 (00:04 +0100)
r=dkl a=sgreen

Bugzilla/CGI.pm
Bugzilla/Error.pm
Bugzilla/Search.pm
buglist.cgi

index b67f9f7519f867599afccef09dfd4dc407e7f594..dc298a0532629c3786643250caca9a7ac9971c26 100644 (file)
@@ -265,9 +265,24 @@ sub multipart_start {
         $headers .= "Set-Cookie: ${cookie}${CGI::CRLF}";
     }
     $headers .= $CGI::CRLF;
+    $self->{_multipart_in_progress} = 1;
     return $headers;
 }
 
+sub close_standby_message {
+    my ($self, $contenttype, $disposition) = @_;
+
+    if ($self->{_multipart_in_progress}) {
+        print $self->multipart_end();
+        print $self->multipart_start(-type                => $contenttype,
+                                     -content_disposition => $disposition);
+    }
+    else {
+        print $self->header(-type                => $contenttype,
+                            -content_disposition => $disposition);
+    }
+}
+
 # Override header so we can add the cookies in
 sub header {
     my $self = shift;
@@ -632,6 +647,15 @@ instead of calling this directly.
 
 Redirects from the current URL to one prefixed by the urlbase parameter.
 
+=item C<multipart_start>
+
+Starts a new part of the multipart document using the specified MIME type.
+If not specified, text/html is assumed.
+
+=item C<close_standby_message>
+
+Ends a part of the multipart document, and starts another part.
+
 =back
 
 =head1 SEE ALSO
index e1df5ddbb14e5f4c6cfbfe47cca73ab38931c26b..cebc2a4ac0dc996a19a909803c596889e2eb37b1 100644 (file)
@@ -92,8 +92,10 @@ sub _throw_error {
                                              message => \$message });
 
     if (Bugzilla->error_mode == ERROR_MODE_WEBPAGE) {
-        print Bugzilla->cgi->header();
+        my $cgi = Bugzilla->cgi;
+        $cgi->close_standby_message('text/html', 'inline');
         print $message;
+        print $cgi->multipart_final() if $cgi->{_multipart_in_progress};
     }
     elsif (Bugzilla->error_mode == ERROR_MODE_TEST) {
         die Dumper($vars);
index b2c703e5b43097a457ab9bb53fbf11be0954befa..f900b347404f7f3828d9e2ff2b826a87b72f35be 100644 (file)
@@ -1951,11 +1951,18 @@ sub _quote_unless_numeric {
     my $numeric_field = $self->_chart_fields->{$field}->is_numeric;
     my $numeric_value = ($value =~ NUMBER_REGEX) ? 1 : 0;
     my $is_numeric = $numeric_operator && $numeric_field && $numeric_value;
+
+    # These operators are really numeric operators with numeric fields.
+    $numeric_operator = grep { $_ eq $operator } keys %{ SIMPLE_OPERATORS() };
+
     if ($is_numeric) {
         my $quoted = $value;
         trick_taint($quoted);
         return $quoted;
     }
+    elsif ($numeric_field && !$numeric_value && $numeric_operator) {
+        ThrowUserError('number_not_numeric', { field => $field, num => $value });
+    }
     return Bugzilla->dbh->quote($value);
 }
 
index 4e3d2bd7afa065a11393f01f204b08c9dc12533d..81350dc81171c5a59ad477ef7954a33aa5038b21 100755 (executable)
@@ -284,23 +284,6 @@ sub GetGroups {
     return [values %legal_groups];
 }
 
-sub _close_standby_message {
-    my ($contenttype, $disposition, $serverpush) = @_;
-    my $cgi = Bugzilla->cgi;
-
-    # Close the "please wait" page, then open the buglist page
-    if ($serverpush) {
-        print $cgi->multipart_end();
-        print $cgi->multipart_start(-type                => $contenttype,
-                                    -content_disposition => $disposition);
-    }
-    else {
-        print $cgi->header(-type                => $contenttype,
-                           -content_disposition => $disposition);
-    }
-}
-
-
 ################################################################################
 # Command Execution
 ################################################################################
@@ -945,7 +928,6 @@ if ($one_product && $user->can_enter_product($one_product)) {
 # The following variables are used when the user is making changes to multiple bugs.
 if ($dotweak && scalar @bugs) {
     if (!$vars->{'caneditbugs'}) {
-        _close_standby_message('text/html', 'inline', $serverpush);
         ThrowUserError('auth_failure', {group  => 'editbugs',
                                         action => 'modify',
                                         object => 'multiple_bugs'});
@@ -1055,7 +1037,7 @@ if ($format->{'extension'} eq "csv") {
 # Suggest a name for the bug list if the user wants to save it as a file.
 $disposition .= "; filename=\"$filename\"";
 
-_close_standby_message($contenttype, $disposition, $serverpush);
+$cgi->close_standby_message($contenttype, $disposition);
 
 ################################################################################
 # Content Generation