summaryrefslogtreecommitdiffstats
path: root/Bugzilla
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla')
-rw-r--r--Bugzilla/Install/DB.pm28
1 files changed, 20 insertions, 8 deletions
diff --git a/Bugzilla/Install/DB.pm b/Bugzilla/Install/DB.pm
index 04afbdb60..f0b6403cf 100644
--- a/Bugzilla/Install/DB.pm
+++ b/Bugzilla/Install/DB.pm
@@ -3486,21 +3486,33 @@ sub _migrate_user_tags {
# Tags are all lowercase.
my $tag_name = lc($name);
- $sth_tags->execute($user_id, $tag_name);
+ # Some queries were incorrectly parsed when _migrate_user_tags()
+ # was first implemented, and so some tags may have already been
+ # added to the DB. We don't want to crash in that case.
+ eval { $sth_tags->execute($user_id, $tag_name); };
my $tag_id = $dbh->selectrow_array(
'SELECT id FROM tags WHERE user_id = ? AND name = ?',
undef, ($user_id, $tag_name));
- $query =~ s/^bug_id=//;
- # Commas in Bugzilla 3.x are encoded as %2C, but not in 2.22.
- $query =~ s/%2C/,/g;
- my @bug_ids = split(/[\s,]+/, $query);
- $sth_bug_tag->execute($_, $tag_id) foreach @bug_ids;
-
+ my $columnlist = "";
+ if ($query =~ /^bug_id=([^&;]+)(.*)$/) {
+ my $buglist = $1;
+ $columnlist = $2 if $2;
+ # Commas in Bugzilla 3.x are encoded as %2C, but not in 2.22.
+ $buglist =~ s/%2C/,/g;
+ my @bug_ids = split(/[\s,]+/, $buglist);
+ foreach my $bug_id (@bug_ids) {
+ # Some sanity check. We never know.
+ next unless detaint_natural($bug_id);
+ # For the same reason as above, let's do it in an eval.
+ eval { $sth_bug_tag->execute($bug_id, $tag_id); };
+ }
+ }
+
# Existing tags may be used in whines, or shared with
# other users. So we convert them rather than delete them.
my $encoded_name = url_quote($tag_name);
- $sth_nq->execute("tag=$encoded_name", $user_id, $name);
+ $sth_nq->execute("tag=$encoded_name$columnlist", $user_id, $name);
}
$dbh->bz_drop_column('namedqueries', 'query_type');