summaryrefslogtreecommitdiffstats
path: root/Bugzilla
diff options
context:
space:
mode:
authorDave Lawrence <dlawrence@mozilla.com>2013-05-04 00:20:52 +0200
committerDave Lawrence <dlawrence@mozilla.com>2013-05-04 00:20:52 +0200
commitac33bc1f6e9de89e1c4da15ed084ca3af19157ff (patch)
treeec0b41280978c80f21837dfa59e700164e2c8c97 /Bugzilla
parent7b3455675a2dae3922cfbe46db03772232f95897 (diff)
downloadbugzilla-ac33bc1f6e9de89e1c4da15ed084ca3af19157ff.tar.gz
bugzilla-ac33bc1f6e9de89e1c4da15ed084ca3af19157ff.tar.xz
Bug 859118 - Bug.search called with no arguments returns all visible bugs, ignoring max_search_results and search_allow_no_criteria
r/a=LpSolit
Diffstat (limited to 'Bugzilla')
-rw-r--r--Bugzilla/WebService/Bug.pm56
-rw-r--r--Bugzilla/WebService/Constants.pm3
2 files changed, 48 insertions, 11 deletions
diff --git a/Bugzilla/WebService/Bug.pm b/Bugzilla/WebService/Bug.pm
index fe102f70d..ff6a85582 100644
--- a/Bugzilla/WebService/Bug.pm
+++ b/Bugzilla/WebService/Bug.pm
@@ -406,14 +406,25 @@ sub history {
sub search {
my ($self, $params) = @_;
-
+
Bugzilla->switch_to_shadow_db();
if ( defined($params->{offset}) and !defined($params->{limit}) ) {
ThrowCodeError('param_required',
{ param => 'limit', function => 'Bug.search()' });
}
-
+
+ my $max_results = Bugzilla->params->{max_search_results};
+ unless (defined $params->{limit} && $params->{limit} == 0) {
+ if (!defined $params->{limit} || $params->{limit} > $max_results) {
+ $params->{limit} = $max_results;
+ }
+ }
+ else {
+ delete $params->{limit};
+ delete $params->{offset};
+ }
+
$params = Bugzilla::Bug::map_fields($params);
delete $params->{WHERE};
@@ -440,7 +451,17 @@ sub search {
my $clause = join(' OR ', @likes);
$params->{WHERE}->{"($clause)"} = [map { "\%$_\%" } @strings];
}
-
+
+ # If no other parameters have been passed other than limit and offset
+ # and a WHERE parameter was not created earlier, then we throw error
+ # if system is configured to do so.
+ if (!$params->{WHERE}
+ && !grep(!/(limit|offset)/i, keys %$params)
+ && !Bugzilla->params->{search_allow_no_criteria})
+ {
+ ThrowUserError('buglist_parameters_required');
+ }
+
# We want include_fields and exclude_fields to be passed to
# _bug_to_hash but not to Bugzilla::Bug->match so we copy the
# params and delete those before passing to Bugzilla::Bug->match.
@@ -2257,13 +2278,16 @@ May not be an array.
=item C<limit>
-C<int> Limit the number of results returned to C<int> records.
+C<int> Limit the number of results returned to C<int> records. If the limit
+is more than zero and higher than the maximum limit set by the administrator,
+then the maximum limit will be used instead. If you set the limit equal to zero,
+then all matching results will be returned instead.
=item C<offset>
-C<int> Used in conjunction with the C<limit> argument, C<offset> defines
-the starting position for the search. For example, given a search that
-would return 100 bugs, setting C<limit> to 10 and C<offset> to 10 would return
+C<int> Used in conjunction with the C<limit> argument, C<offset> defines
+the starting position for the search. For example, given a search that
+would return 100 bugs, setting C<limit> to 10 and C<offset> to 10 would return
bugs 11 through 20 from the set of 100.
=item C<op_sys>
@@ -2349,10 +2373,16 @@ log in and I<then> call this method.
=item B<Errors>
-Currently, this function doesn't throw any special errors (other than
-the ones that all webservice functions can throw). If you specify
-an invalid value for a particular field, you just won't get any results
-for that value.
+If you specify an invalid value for a particular field, you just won't
+get any results for that value.
+
+=over
+
+=item 1000 (Parameters Required)
+
+You may not search without any search terms.
+
+=back
=item B<History>
@@ -2365,6 +2395,10 @@ for that value.
=item The C<reporter> input parameter was renamed to C<creator>
in Bugzilla B<4.0>.
+=item In B<4.2.6> and newer, added the ability to return all results if
+C<limit> is set equal to zero. Otherwise maximum results returned are limited
+by system configuration.
+
=back
=back
diff --git a/Bugzilla/WebService/Constants.pm b/Bugzilla/WebService/Constants.pm
index 624ab6e09..b1503772e 100644
--- a/Bugzilla/WebService/Constants.pm
+++ b/Bugzilla/WebService/Constants.pm
@@ -163,6 +163,9 @@ use constant WS_ERROR_CODE => {
# Classification errors are 900-1000
auth_classification_not_enabled => 900,
+ # Search errors are 1000-1100
+ buglist_parameters_required => 1000,
+
# Errors thrown by the WebService itself. The ones that are negative
# conform to http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php
xmlrpc_invalid_value => -32600,