]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1230932 - Providing a condition as an ID to the webservice results in a taint...
authorDylan Hardison <dylan@mozilla.com>
Tue, 22 Dec 2015 17:08:32 +0000 (12:08 -0500)
committerDylan Hardison <dylan@mozilla.com>
Tue, 22 Dec 2015 17:08:32 +0000 (12:08 -0500)
r=dkl,a=dkl

Bugzilla/WebService/Bug.pm
Bugzilla/WebService/Constants.pm
Bugzilla/WebService/Util.pm
template/en/default/global/code-error.html.tmpl

index c9965120103b2313d98fb904178225e0554937ef..92c81e5fdf2c8ed1b8b876ae7a8a1c2f6193df5b 100644 (file)
@@ -1133,6 +1133,10 @@ sub update_comment_tags {
                           { function => 'Bug.update_comment_tags',
                             param    => 'comment_id' });
 
+    ThrowCodeError("param_integer_required", { function => 'Bug.update_comment_tags',
+                                               param => 'comment_id' })
+      unless $comment_id =~ /^[0-9]+$/;
+
     my $comment = Bugzilla::Comment->new($comment_id)
         || return [];
     $comment->bug->check_is_visible();
index 0bdd3517e4ba6db2a1155759cec9f0e52c10770f..e32b9ad0f03e4d064f9cf42c6140dd578aca8b3b 100644 (file)
@@ -67,6 +67,8 @@ use constant WS_ERROR_CODE => {
     number_too_large            => 54,
     number_too_small            => 55,
     illegal_date                => 56,
+    param_integer_required      => 57,
+    param_integer_array_required => 58,
     # Bug errors usually occupy the 100-200 range.
     improper_bug_id_field_value => 100,
     bug_id_does_not_exist       => 101,
index a0a51a8de23fb84cdf9d263cf939f6c6fc538fbb..27b2b36faea73a139a403cb96592fed0fa330233 100644 (file)
@@ -219,7 +219,8 @@ sub validate  {
     # sent any parameters at all, and we're getting @keys where
     # $params should be.
     return ($self, undef) if (defined $params and !ref $params);
-    
+
+    my @id_params = qw( ids comment_ids );
     # If @keys is not empty then we convert any named 
     # parameters that have scalar values to arrayrefs
     # that match.
@@ -228,6 +229,12 @@ sub validate  {
             $params->{$key} = ref $params->{$key} 
                               ? $params->{$key} 
                               : [ $params->{$key} ];
+
+            if (any { $key eq $_ } @id_params) {
+                my $ids = $params->{$key};
+                ThrowCodeError('param_integer_array_required', { param => $key })
+                  unless ref($ids) eq 'ARRAY' && all { /^[0-9]+$/ } @$ids;
+            }
         }
     }
 
index d73d75e135d6e174449affc1f3164b87626aacb5..6dc49c6f15914510f60fed2699c1e60fd170a233 100644 (file)
     a <code>[% param FILTER html %]</code> argument, and that
     argument was not set.
 
+  [% ELSIF error == "param_integer_required" %]
+    The function <code>[% function FILTER html %]</code> requires
+    that <code>[% param FILTER html %]</code> be an integer.
+
+  [% ELSIF error == "param_integer_array_required" %]
+    The <code>[% param FILTER html %]</code> parameter must be an array of integers.
+
   [% ELSIF error == "params_required" %]
     [% title = "Missing Parameter" %]
     The function <code>[% function FILTER html %]</code> requires