]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 653341: Bug.create() fails to error out if an invalid group is passed
authorFrédéric Buclin <LpSolit@gmail.com>
Fri, 6 May 2011 20:42:31 +0000 (22:42 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Fri, 6 May 2011 20:42:31 +0000 (22:42 +0200)
r/a=mkanat

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

index beafcfa8c3f11e3f507e7901849dbc0afa9a7141..f3d635344b75a8750036acda8043d5daa84d881d 100644 (file)
@@ -1641,11 +1641,14 @@ sub _check_groups {
 
         # First check all the groups they chose to set.
         foreach my $name (@$group_names) {
-            # We don't want to expose the existence or non-existence of groups,
-            # so instead of doing check(), we just do "next" on an invalid
-            # group.
-            my $group = new Bugzilla::Group({ name => $name }) or next;
-            next if !$product->group_is_settable($group);
+            my $group = Bugzilla::Group->check(
+                { name => $name, product => $product,
+                  _error => 'group_restriction_not_allowed' });
+
+            if (!$product->group_is_settable($group)) {
+                ThrowUserError('group_restriction_not_allowed',
+                               { name => $name, product => $product });
+            }
             $add_groups{$group->id} = $group;
         }
     }
index 582a9ce916747f0fd44b6474e3d6acff472abfd3..73310428639e24e00210b17049b68037d8b6f5c1 100644 (file)
@@ -2267,9 +2267,8 @@ is private, otherwise it is assumed to be public.
 =item C<groups> (array) - An array of group names to put this
 bug into. You can see valid group names on the Permissions
 tab of the Preferences screen, or, if you are an administrator,
-in the Groups control panel. Note that invalid group names or
-groups that the bug can't be restricted to are silently ignored. If
-you don't specify this argument, then a bug will be added into
+in the Groups control panel.
+If you don't specify this argument, then the bug will be added into
 all the groups that are set as being "Default" for this product. (If
 you want to avoid that, you should specify C<groups> as an empty array.)
 
@@ -2330,6 +2329,11 @@ You didn't specify a summary for the bug.
 You specified values in the C<blocks> or C<depends_on> fields
 that would cause a circular dependency between bugs.
 
+=item 120 (Group Restriction Denied)
+
+You tried to restrict the bug to a group which does not exist, or which
+you cannot use with this product.
+
 =item 504 (Invalid User)
 
 Either the QA Contact, Assignee, or CC lists have some invalid user
@@ -2346,7 +2350,9 @@ B<Required>, due to a bug in Bugzilla.
 
 =item The C<groups> argument was added in Bugzilla B<4.0>. Before
 Bugzilla 4.0, bugs were only added into Mandatory groups by this
-method.
+method. Since Bugzilla B<4.0.2>, passing an illegal group name will
+throw an error. In Bugzilla 4.0 and 4.0.1, illegal group names were
+silently ignored.
 
 =item The C<comment_is_private> argument was added in Bugzilla B<4.0>.
 Before Bugzilla 4.0, you had to use the undocumented C<commentprivacy>
index a1063864f6bbbe7889dddced41c4f2e4571e1a3a..cb518b0bd68103b566691584b9b8c3daacc17ef1 100644 (file)
@@ -111,6 +111,7 @@ use constant WS_ERROR_CODE => {
     # Bug-related group errors
     group_change_denied => 120,
     group_invalid_restriction => 120,
+    group_restriction_not_allowed => 120,
     # Status/Resolution errors
     missing_resolution => 121,
     resolution_not_allowed => 122,
index cda3d2e5dbdf391679163e3275d2e5b02f42f931..1dd747f30a2cbc63ff0d3b335cea0af44d124f21 100644 (file)
     '[% product FILTER html %]' product can not be restricted to
     that group.
 
+  [% ELSIF error == "group_restriction_not_allowed" %]
+    [% title = "Group Restriction Not Allowed" %]
+    You tried to restrict [% terms.abug %] to the "[% name FILTER html %]"
+    group, but either this group does not exist, or you are not allowed
+    to restrict [% terms.bugs %] to this group in the "[% product.name FILTER html %]"
+    product.
+
   [% ELSIF error == "group_not_specified" %]
     [% title = "Group not specified" %]
     No group was specified.