From 928154771796d8045f2a9fdf712a1305d6d63055 Mon Sep 17 00:00:00 2001 From: Dave Lawrence Date: Fri, 3 May 2013 18:23:50 -0400 Subject: Bug 859118 - Bug.search called with no arguments returns all visible bugs, ignoring max_search_results and search_allow_no_criteria r/a=LpSolit --- Bugzilla/WebService/Bug.pm | 56 ++++++++++++++++++++++++++++++++-------- Bugzilla/WebService/Constants.pm | 3 +++ 2 files changed, 48 insertions(+), 11 deletions(-) diff --git a/Bugzilla/WebService/Bug.pm b/Bugzilla/WebService/Bug.pm index 578c06ec5..8c59be2a9 100644 --- a/Bugzilla/WebService/Bug.pm +++ b/Bugzilla/WebService/Bug.pm @@ -399,12 +399,23 @@ sub history { sub search { my ($self, $params) = @_; - + 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}; @@ -431,7 +442,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. @@ -2074,13 +2095,16 @@ May not be an array. =item C -C Limit the number of results returned to C records. +C Limit the number of results returned to C 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 -C Used in conjunction with the C argument, C defines -the starting position for the search. For example, given a search that -would return 100 bugs, setting C to 10 and C to 10 would return +C Used in conjunction with the C argument, C defines +the starting position for the search. For example, given a search that +would return 100 bugs, setting C to 10 and C to 10 would return bugs 11 through 20 from the set of 100. =item C @@ -2166,10 +2190,16 @@ log in and I call this method. =item B -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 @@ -2182,6 +2212,10 @@ for that value. =item The C input parameter was renamed to C in Bugzilla B<4.0>. +=item In B<4.2.6> and newer, added the ability to return all results if +C 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 6274c3a78..3207356fa 100644 --- a/Bugzilla/WebService/Constants.pm +++ b/Bugzilla/WebService/Constants.pm @@ -168,6 +168,9 @@ use constant WS_ERROR_CODE => { invalid_regexp => 803, invalid_group_name => 804, + # 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, -- cgit v1.2.3-24-g4f1b From 00580923eb02b98581d9b4fc24f22fcaaf15b5a0 Mon Sep 17 00:00:00 2001 From: Frédéric Buclin Date: Sun, 5 May 2013 23:35:46 +0200 Subject: Bug 212471: Tabular reports do not link bug counts involving the empty resolution correctly r=dkl a=LpSolit --- report.cgi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/report.cgi b/report.cgi index 7bff62be9..c73f52b44 100755 --- a/report.cgi +++ b/report.cgi @@ -323,7 +323,7 @@ sub get_names { foreach my $value (@{$field->legal_values}) { push(@sorted, $value->name) if $names->{$value->name}; } - unshift(@sorted, ' ') if $field_name eq 'resolution'; + unshift(@sorted, '---') if $field_name eq 'resolution'; @sorted = uniq @sorted; } elsif ($isnumeric) { @@ -352,6 +352,7 @@ sub check_value { else { $value = shift @$result; $value = ' ' if (!defined $value || $value eq ''); + $value = '---' if ($field eq 'resolution' && $value eq ' '); } return $value; } -- cgit v1.2.3-24-g4f1b