Commit c00ea208 authored by mkanat%bugzilla.org's avatar mkanat%bugzilla.org

Bug 348542: Move keyword validation out of post_bug.cgi and into Bugzilla::Bug

Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=bkor, a=myk
parent bb496330
...@@ -35,6 +35,7 @@ use Bugzilla::Constants; ...@@ -35,6 +35,7 @@ use Bugzilla::Constants;
use Bugzilla::Field; use Bugzilla::Field;
use Bugzilla::Flag; use Bugzilla::Flag;
use Bugzilla::FlagType; use Bugzilla::FlagType;
use Bugzilla::Keyword;
use Bugzilla::User; use Bugzilla::User;
use Bugzilla::Util; use Bugzilla::Util;
use Bugzilla::Error; use Bugzilla::Error;
...@@ -333,6 +334,21 @@ sub _check_component { ...@@ -333,6 +334,21 @@ sub _check_component {
return $obj; return $obj;
} }
sub _check_keywords {
my ($keyword_string) = @_;
$keyword_string = trim($keyword_string);
return [] if (!$keyword_string || !Bugzilla->user->in_group('editbugs'));
my %keyword_ids;
foreach my $keyword (split(/[\s,]+/, $keyword_string)) {
next unless $keyword;
my $obj = new Bugzilla::Keyword({ name => $keyword });
ThrowUserError("unknown_keyword", { keyword => $keyword }) if !$obj;
$keyword_ids{$obj->id} = 1;
}
return [keys %keyword_ids];
}
sub _check_product { sub _check_product {
my ($name) = @_; my ($name) = @_;
# Check that the product exists and that the user # Check that the product exists and that the user
......
...@@ -221,28 +221,7 @@ $cgi->param(-name => 'component_id', -value => $component->id); ...@@ -221,28 +221,7 @@ $cgi->param(-name => 'component_id', -value => $component->id);
push(@used_fields, "component_id"); push(@used_fields, "component_id");
my @cc_ids = @{Bugzilla::Bug::_check_cc([$cgi->param('cc')])}; my @cc_ids = @{Bugzilla::Bug::_check_cc([$cgi->param('cc')])};
my @keyword_ids = @{Bugzilla::Bug::_check_keywords($cgi->param('keywords'))};
# Check for valid keywords and create list of keywords to be added to db
# (validity routine copied from process_bug.cgi)
my @keywordlist;
my %keywordseen;
if ($cgi->param('keywords') && UserInGroup("editbugs")) {
foreach my $keyword (split(/[\s,]+/, $cgi->param('keywords'))) {
if ($keyword eq '') {
next;
}
my $keyword_obj = new Bugzilla::Keyword({name => $keyword});
if (!$keyword_obj) {
ThrowUserError("unknown_keyword",
{ keyword => $keyword });
}
if (!$keywordseen{$keyword_obj->id}) {
push(@keywordlist, $keyword_obj->id);
$keywordseen{$keyword_obj->id} = 1;
}
}
}
if (Bugzilla->params->{"strict_isolation"}) { if (Bugzilla->params->{"strict_isolation"}) {
my @blocked_users = (); my @blocked_users = ();
...@@ -439,12 +418,12 @@ my @all_deps; ...@@ -439,12 +418,12 @@ my @all_deps;
my $sth_addkeyword = $dbh->prepare(q{ my $sth_addkeyword = $dbh->prepare(q{
INSERT INTO keywords (bug_id, keywordid) VALUES (?, ?)}); INSERT INTO keywords (bug_id, keywordid) VALUES (?, ?)});
if (UserInGroup("editbugs")) { if (UserInGroup("editbugs")) {
foreach my $keyword (@keywordlist) { foreach my $keyword (@keyword_ids) {
$sth_addkeyword->execute($id, $keyword); $sth_addkeyword->execute($id, $keyword);
} }
if (@keywordlist) { if (@keyword_ids) {
# Make sure that we have the correct case for the kw # Make sure that we have the correct case for the kw
my $kw_ids = join(', ', @keywordlist); my $kw_ids = join(', ', @keyword_ids);
my $list = $dbh->selectcol_arrayref(qq{ my $list = $dbh->selectcol_arrayref(qq{
SELECT name SELECT name
FROM keyworddefs FROM keyworddefs
......
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