From c00ea2087a9dac0ec48de4a9bb02843d7298e2bd Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Tue, 22 Aug 2006 01:53:16 +0000 Subject: Bug 348542: Move keyword validation out of post_bug.cgi and into Bugzilla::Bug Patch By Max Kanat-Alexander r=bkor, a=myk --- Bugzilla/Bug.pm | 16 ++++++++++++++++ post_bug.cgi | 29 ++++------------------------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 343f49e18..9c9e2828d 100755 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -35,6 +35,7 @@ use Bugzilla::Constants; use Bugzilla::Field; use Bugzilla::Flag; use Bugzilla::FlagType; +use Bugzilla::Keyword; use Bugzilla::User; use Bugzilla::Util; use Bugzilla::Error; @@ -333,6 +334,21 @@ sub _check_component { 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 { my ($name) = @_; # Check that the product exists and that the user diff --git a/post_bug.cgi b/post_bug.cgi index 306bed84c..33e58f182 100755 --- a/post_bug.cgi +++ b/post_bug.cgi @@ -221,28 +221,7 @@ $cgi->param(-name => 'component_id', -value => $component->id); push(@used_fields, "component_id"); my @cc_ids = @{Bugzilla::Bug::_check_cc([$cgi->param('cc')])}; - -# 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; - } - } -} +my @keyword_ids = @{Bugzilla::Bug::_check_keywords($cgi->param('keywords'))}; if (Bugzilla->params->{"strict_isolation"}) { my @blocked_users = (); @@ -439,12 +418,12 @@ my @all_deps; my $sth_addkeyword = $dbh->prepare(q{ INSERT INTO keywords (bug_id, keywordid) VALUES (?, ?)}); if (UserInGroup("editbugs")) { - foreach my $keyword (@keywordlist) { + foreach my $keyword (@keyword_ids) { $sth_addkeyword->execute($id, $keyword); } - if (@keywordlist) { + if (@keyword_ids) { # 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{ SELECT name FROM keyworddefs -- cgit v1.2.3-24-g4f1b