Commit 89222752 authored by bugreport%peshkin.net's avatar bugreport%peshkin.net

Bug 141593 You can add/remove dependencies on bugs you can't see

Patch by Joel Peshkin <bugreport@peshkin.net> r=lpsolit, a=justdave
parent 6372dbd5
...@@ -261,7 +261,9 @@ foreach my $field ("dependson", "blocked") { ...@@ -261,7 +261,9 @@ foreach my $field ("dependson", "blocked") {
my @validvalues; my @validvalues;
foreach my $id (split(/[\s,]+/, $cgi->param($field))) { foreach my $id (split(/[\s,]+/, $cgi->param($field))) {
next unless $id; next unless $id;
ValidateBugID($id, $field); # $field is not passed to ValidateBugID to prevent adding new
# dependencies on inacessible bugs.
ValidateBugID($id);
push(@validvalues, $id); push(@validvalues, $id);
} }
$cgi->param(-name => $field, -value => join(",", @validvalues)); $cgi->param(-name => $field, -value => join(",", @validvalues));
......
...@@ -43,6 +43,7 @@ use strict; ...@@ -43,6 +43,7 @@ use strict;
my $UserInEditGroupSet = -1; my $UserInEditGroupSet = -1;
my $UserInCanConfirmGroupSet = -1; my $UserInCanConfirmGroupSet = -1;
my $PrivilegesRequired = 0; my $PrivilegesRequired = 0;
my $lastbugid = 0;
use lib qw(.); use lib qw(.);
...@@ -144,14 +145,32 @@ ValidateComment(scalar $cgi->param('comment')); ...@@ -144,14 +145,32 @@ ValidateComment(scalar $cgi->param('comment'));
# is a bug alias that gets converted to its corresponding bug ID # is a bug alias that gets converted to its corresponding bug ID
# during validation. # during validation.
foreach my $field ("dependson", "blocked") { foreach my $field ("dependson", "blocked") {
if ($cgi->param($field)) { if ($cgi->param('id')) {
my @validvalues; my $bug = new Bugzilla::Bug($cgi->param('id'), $user->id);
my @old = @{$bug->$field};
my @new;
foreach my $id (split(/[\s,]+/, $cgi->param($field))) { foreach my $id (split(/[\s,]+/, $cgi->param($field))) {
next unless $id; next unless $id;
ValidateBugID($id, $field); ValidateBugID($id, $field);
push(@validvalues, $id); push @new, $id;
}
$cgi->param($field, join(",", @new));
my ($added, $removed) = Bugzilla::Util::diff_arrays(\@old, \@new);
foreach my $id (@$added , @$removed) {
# ValidateBugID is called without $field here so that it will
# throw an error if any of the changed bugs are not visible.
ValidateBugID($id);
if (!CheckCanChangeField($field, $bug->bug_id, 0, 1)) {
$vars->{'privs'} = $PrivilegesRequired;
$vars->{'field'} = $field;
ThrowUserError("illegal_change", $vars);
}
} }
$cgi->param($field, join(",", @validvalues)); } else {
# Bugzilla does not support mass-change of dependencies so they
# are not validated. To prevent a URL-hacking risk, the dependencies
# are deleted for mass-changes.
$cgi->delete($field);
} }
} }
...@@ -353,7 +372,6 @@ if (((defined $cgi->param('id') && $cgi->param('product') ne $oldproduct) ...@@ -353,7 +372,6 @@ if (((defined $cgi->param('id') && $cgi->param('product') ne $oldproduct)
# now, the rules are pretty simple, and don't look at the field itself very # now, the rules are pretty simple, and don't look at the field itself very
# much, but that could be enhanced. # much, but that could be enhanced.
my $lastbugid = 0;
my $ownerid; my $ownerid;
my $reporterid; my $reporterid;
my $qacontactid; my $qacontactid;
......
...@@ -524,8 +524,13 @@ ...@@ -524,8 +524,13 @@
[% title = "Not allowed" %] [% title = "Not allowed" %]
You tried to change the You tried to change the
<strong>[% field_descs.$field FILTER html %]</strong> field <strong>[% field_descs.$field FILTER html %]</strong> field
from <em>[% oldvalue FILTER html %]</em> to [% IF oldvalue %]
<em>[% newvalue FILTER html %]</em>, but only from <em>[% oldvalue FILTER html %]</em>
[% END %]
[% IF newvalue %]
to <em>[% newvalue FILTER html %]</em>
[% END %]
, but only
[% IF privs < 3 %] [% IF privs < 3 %]
the assignee the assignee
[% IF privs < 2 %] or reporter [% END %] [% IF privs < 2 %] or reporter [% END %]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment