Commit d10ad549 authored by mkanat%kerio.com's avatar mkanat%kerio.com

Bug 284838: editvalues.cgi does not use $dbh->bz_(un)lock_tables

Patch By Max Kanat-Alexander <mkanat@kerio.com> r=LpSolit, a=justdave
parent ec610fd6
...@@ -253,6 +253,8 @@ if ($action eq 'delete') { ...@@ -253,6 +253,8 @@ if ($action eq 'delete') {
trick_taint($field); trick_taint($field);
trick_taint($value); trick_taint($value);
$dbh->bz_lock_tables('bugs READ', "$field WRITE");
# Check if there are any bugs that still have this value. # Check if there are any bugs that still have this value.
my $bug_ids = $dbh->selectcol_arrayref( my $bug_ids = $dbh->selectcol_arrayref(
"SELECT bug_id FROM bugs WHERE $field = ?", undef, $value); "SELECT bug_id FROM bugs WHERE $field = ?", undef, $value);
...@@ -260,7 +262,6 @@ if ($action eq 'delete') { ...@@ -260,7 +262,6 @@ if ($action eq 'delete') {
if (scalar(@$bug_ids)) { if (scalar(@$bug_ids)) {
# You tried to delete a field that bugs are still using. # You tried to delete a field that bugs are still using.
# You can't just delete the bugs. That's ridiculous. # You can't just delete the bugs. That's ridiculous.
$dbh->do('UNLOCK TABLES');
ThrowUserError("fieldvalue_still_has_bugs", ThrowUserError("fieldvalue_still_has_bugs",
{ field => $field, value => $value, { field => $field, value => $value,
count => scalar(@$bug_ids) }); count => scalar(@$bug_ids) });
...@@ -268,6 +269,8 @@ if ($action eq 'delete') { ...@@ -268,6 +269,8 @@ if ($action eq 'delete') {
$dbh->do("DELETE FROM $field WHERE value = ?", undef, $value); $dbh->do("DELETE FROM $field WHERE value = ?", undef, $value);
$dbh->bz_unlock_tables();
unlink "$datadir/versioncache"; unlink "$datadir/versioncache";
$vars->{'value'} = $value; $vars->{'value'} = $value;
...@@ -318,7 +321,7 @@ if ($action eq 'update') { ...@@ -318,7 +321,7 @@ if ($action eq 'update') {
{'value' => $value}); {'value' => $value});
} }
$dbh->do("LOCK TABLES bugs WRITE, $field WRITE"); $dbh->bz_lock_tables('bugs WRITE', "$field WRITE");
# Need to store because detaint_natural() will delete this if # Need to store because detaint_natural() will delete this if
# invalid # invalid
...@@ -326,7 +329,6 @@ if ($action eq 'update') { ...@@ -326,7 +329,6 @@ if ($action eq 'update') {
if ($sortkey != $sortkeyold) { if ($sortkey != $sortkeyold) {
if (!detaint_natural($sortkey)) { if (!detaint_natural($sortkey)) {
$dbh->do('UNLOCK TABLES');
ThrowUserError('fieldvalue_sortkey_invalid', ThrowUserError('fieldvalue_sortkey_invalid',
{'name' => $field, {'name' => $field,
'sortkey' => $stored_sortkey}); 'sortkey' => $stored_sortkey});
...@@ -344,11 +346,9 @@ if ($action eq 'update') { ...@@ -344,11 +346,9 @@ if ($action eq 'update') {
if ($value ne $valueold) { if ($value ne $valueold) {
unless ($value) { unless ($value) {
$dbh->do('UNLOCK TABLES');
ThrowUserError('fieldvalue_undefined'); ThrowUserError('fieldvalue_undefined');
} }
if (ValueExists($field, $value)) { if (ValueExists($field, $value)) {
$dbh->do('UNLOCK TABLES');
ThrowUserError('fieldvalue_already_exists', ThrowUserError('fieldvalue_already_exists',
{'value' => $value, {'value' => $value,
'field' => $field}); 'field' => $field});
...@@ -366,7 +366,7 @@ if ($action eq 'update') { ...@@ -366,7 +366,7 @@ if ($action eq 'update') {
$vars->{'updated_value'} = 1; $vars->{'updated_value'} = 1;
} }
$dbh->do('UNLOCK TABLES'); $dbh->bz_unlock_tables();
$vars->{'value'} = $value; $vars->{'value'} = $value;
$vars->{'field'} = $field; $vars->{'field'} = $field;
......
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