summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Lawrence <dkl@redhat.com>2010-03-03 23:11:16 +0100
committerDavid Lawrence <dkl@redhat.com>2010-03-03 23:11:16 +0100
commitb30aeba04609049378374441209f7e808931e198 (patch)
treed7b46b44dfc197ce0bbbb2fe58d924ced424d051
parent8d0710acaba90364e20af1cb9d23a8ad62f3bcd3 (diff)
downloadbugzilla-b30aeba04609049378374441209f7e808931e198.tar.gz
bugzilla-b30aeba04609049378374441209f7e808931e198.tar.xz
Bug 513989 - large search query causing internal server error (500) but valid redirect 302 returned
r=mkanat, a=mkanat
-rw-r--r--Bugzilla/Constants.pm7
-rwxr-xr-xbuglist.cgi8
2 files changed, 12 insertions, 3 deletions
diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm
index 4a39110fa..185c60c1f 100644
--- a/Bugzilla/Constants.pm
+++ b/Bugzilla/Constants.pm
@@ -173,6 +173,8 @@ use File::Basename;
PASSWORD_DIGEST_ALGORITHM
PASSWORD_SALT_LENGTH
+
+ CGI_URI_LIMIT
);
@Bugzilla::Constants::EXPORT_OK = qw(contenttypes);
@@ -515,6 +517,11 @@ use constant PASSWORD_DIGEST_ALGORITHM => 'SHA-256';
# of your users will be able to log in until they reset their passwords.
use constant PASSWORD_SALT_LENGTH => 8;
+# Certain scripts redirect to GET even if the form was submitted originally
+# via POST such as buglist.cgi. This value determines whether the redirect
+# can be safely done or not based on the web server's URI length setting.
+use constant CGI_URI_LIMIT => 10000;
+
sub bz_locations {
# We know that Bugzilla/Constants.pm must be in %INC at this point.
# So the only question is, what's the name of the directory
diff --git a/buglist.cgi b/buglist.cgi
index 810dd7b00..3090b2a88 100755
--- a/buglist.cgi
+++ b/buglist.cgi
@@ -85,9 +85,11 @@ if (grep { $_ =~ /^cmd\-/ } $cgi->param()) {
#
if ($cgi->request_method() eq 'POST') {
$cgi->clean_search_url();
-
- print $cgi->redirect(-url => $cgi->self_url());
- exit;
+ my $uri_length = length($cgi->self_url());
+ if ($uri_length < CGI_URI_LIMIT) {
+ print $cgi->redirect(-url => $cgi->self_url());
+ exit;
+ }
}
# Determine whether this is a quicksearch query.