diff --git a/Bugzilla.pm b/Bugzilla.pm
index d473b8a1e..021d00176 100644
--- a/Bugzilla.pm
+++ b/Bugzilla.pm
@@ -491,10 +491,8 @@ sub input_params
}
return $cache->{input_params} if defined $cache->{input_params};
- # Making this scalar makes it a tied hash to the internals of $cgi,
- # so if a variable is changed, then it actually changes the $cgi object
- # as well.
- $cache->{input_params} = $class->cgi->Vars;
+ # Throw away the tie.
+ $cache->{input_params} = { %{ $class->cgi->Vars } };
return $cache->{input_params};
}
@@ -974,6 +972,7 @@ sub fieldvaluecontrol
my $has = {};
for (@$rows)
{
+ next if !defined $_->{dep_field_id}; # FIXME: means fieldvaluecontrol table has inconsistent data
if ($_->{value_id} > 0)
{
# Show value_id if value_field==visibility_value_id
diff --git a/Bugzilla/Attachment.pm b/Bugzilla/Attachment.pm
index f7ca26228..e7a804f60 100644
--- a/Bugzilla/Attachment.pm
+++ b/Bugzilla/Attachment.pm
@@ -1131,9 +1131,10 @@ sub get_content_type
# CustIS Bug 68919 - Create multiple attachments to bug
sub add_multiple
{
- my ($bug, $cgi) = @_;
+ my ($bug) = @_;
my $multiple = {};
- my $params = $cgi->Vars;
+ my $params = Bugzilla->input_params;
+ my $cgi = Bugzilla->cgi;
my ($multi, $key);
for (keys %$params)
{
diff --git a/Bugzilla/Auth/Login/CGI.pm b/Bugzilla/Auth/Login/CGI.pm
index 314e2e9a1..8941261e0 100644
--- a/Bugzilla/Auth/Login/CGI.pm
+++ b/Bugzilla/Auth/Login/CGI.pm
@@ -44,6 +44,7 @@ sub get_login_info {
my $username = trim(delete $params->{"Bugzilla_login"});
my $password = delete $params->{"Bugzilla_password"};
+ Bugzilla->cgi->delete('Bugzilla_login', 'Bugzilla_password');
if (!defined $username || !defined $password) {
return { failure => AUTH_NODATA };
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm
index ededaf7dd..5c34f13f5 100644
--- a/Bugzilla/Bug.pm
+++ b/Bugzilla/Bug.pm
@@ -271,7 +271,7 @@ use constant FIELD_MAP => {
use constant SCALAR_FORMAT => { map { $_ => 1 } qw(
alias bug_file_loc bug_id dup_id cclist_accessible creation_ts deadline
delta_ts estimated_time everconfirmed remaining_time reporter_accessible
- short_desc status_whiteboard keywords
+ short_desc status_whiteboard keywords votes
) };
use constant ARRAY_FORMAT => { map { $_ => 1 } qw(dependson blocked cc) };
@@ -671,7 +671,7 @@ sub prepare_mail_results
{
$type = 'created';
}
- elsif ($self->{added_comments} && grep { $_->{type} == CMT_POPULAR_VOTES } @{$self->{added_comments}})
+ elsif ($self->{added_comments} && grep { ($_->{type} || CMT_NORMAL) == CMT_POPULAR_VOTES } @{$self->{added_comments}})
{
$type = 'votes';
}
@@ -805,7 +805,7 @@ sub get_dependent_check_order
my @a;
while (@d)
{
- $f = $check{shift @d};
+ $f = $check{shift(@d)||''};
if ($f)
{
unshift @a, $f;
@@ -1087,7 +1087,7 @@ sub _check_resolution
ThrowUserError('missing_resolution', { status => $self->status->name });
}
- if (!$self->{_old_self} && $self->resolution || $self->{_old_self} && $self->resolution != $self->{_old_self}->resolution)
+ if (!$self->{_old_self} && $self->resolution || $self->{_old_self} && ($self->resolution || 0) != ($self->{_old_self}->resolution || 0))
{
# Check noresolveonopenblockers.
if (Bugzilla->params->{noresolveonopenblockers} && $self->resolution && @{$self->dependson})
@@ -1928,7 +1928,7 @@ sub _set_component
$self->{_unknown_dependent_values}->{component} = [ $name ];
return undef;
}
- if ($self->component_id != $obj->id)
+ if (($self->component_id || 0) != $obj->id)
{
$self->{component_id} = $obj->id;
$self->{component} = $obj->name;
@@ -1966,7 +1966,7 @@ sub _set_dup_id
my ($self, $dupe_of) = @_;
$dupe_of = defined $dupe_of ? trim($dupe_of) : undef;
- if ($dupe_of eq $self->dup_id)
+ if (($dupe_of || 0) == ($self->dup_id || 0))
{
return undef;
}
@@ -2214,7 +2214,7 @@ sub _set_product
# can_enter_product already does everything that check_product
# would do for us, so we don't need to use it.
my $product = new Bugzilla::Product({ name => $name });
- if ($self->product_id != $product->id)
+ if (($self->product_id || 0) != $product->id)
{
$self->{product_id} = $product->id;
$self->{product} = $product->name;
@@ -2429,7 +2429,7 @@ sub _set_datetime_field
# Empty datetimes are empty strings or strings only containing
# 0's, whitespace, and punctuation.
- if ($date_time =~ /^[\s0[:punct:]]*$/)
+ if (($date_time || '') =~ /^[\s0[:punct:]]*$/)
{
return $self->{$field} = undef;
}
@@ -2460,7 +2460,7 @@ sub _set_default_field
sub _set_numeric_field
{
my ($self, $text, $field) = @_;
- ($text) = $text =~ /^(-?\d+(\.\d+)?)$/so;
+ ($text) = (($text || 0) =~ /^(-?\d+(\.\d+)?)$/so);
return $text || 0;
}
@@ -2979,7 +2979,7 @@ sub dup_id
sub deadline
{
my ($self) = @_;
- my $s = $self->{deadline};
+ my $s = $self->{deadline} || '';
$s =~ s/\s+.*//s;
return $s eq '0000-00-00' ? '' : $s;
}
@@ -3556,8 +3556,8 @@ sub ValidateTime
{
my ($time, $field) = @_;
- $time =~ tr/,/./;
$time = trim($time) || 0;
+ $time =~ tr/,/./;
if ($time =~ /^(-?)(\d+):(\d+)$/so)
{
@@ -4335,7 +4335,7 @@ sub get_string
else
{
warn "Don't know how to format field in text: $f";
- next;
+ return '';
}
return $value;
}
diff --git a/Bugzilla/CGI.pm b/Bugzilla/CGI.pm
index f0cfb6325..30486754c 100644
--- a/Bugzilla/CGI.pm
+++ b/Bugzilla/CGI.pm
@@ -435,42 +435,6 @@ sub url_is_attachment_base
return ($self->self_url =~ $regex) ? 1 : 0;
}
-##########################
-# Vars TIEHASH Interface #
-##########################
-
-# Fix the TIEHASH interface (scalar $cgi->Vars) to return and accept arrayrefs.
-sub STORE
-{
- my $self = shift;
- my ($param, $value) = @_;
- if (defined $value and ref $value eq 'ARRAY')
- {
- return $self->param(-name => $param, -value => $value);
- }
- return $self->SUPER::STORE(@_);
-}
-
-sub FETCH
-{
- my ($self, $param) = @_;
- return $self if $param eq 'CGI'; # CGI.pm did this, so we do too.
- my @result = $self->param($param);
- return undef if !scalar(@result);
- return $result[0] if scalar(@result) == 1;
- return \@result;
-}
-
-# For the Vars TIEHASH interface: the normal CGI.pm DELETE doesn't return
-# the value deleted, but Perl's "delete" expects that value.
-sub DELETE
-{
- my ($self, $param) = @_;
- my $value = $self->FETCH($param);
- $self->delete($param);
- return $value;
-}
-
# cookie() with UTF-8 support...
sub cookie
{
@@ -532,7 +496,7 @@ sub VarHash
my $self = shift;
return $self->{_VarHash} if $self->{_VarHash};
my ($force_array) = @_;
- my $args = { %{ $self->Vars } };
+ my $args = Bugzilla->input_params;
my $filtered = {};
for my $key (keys %$args)
{
diff --git a/Bugzilla/Error.pm b/Bugzilla/Error.pm
index d4df79a1c..6e31f7e6d 100644
--- a/Bugzilla/Error.pm
+++ b/Bugzilla/Error.pm
@@ -61,7 +61,7 @@ sub _error_message
$Data::Dumper::Indent = 1;
# Don't try to dump upload data, dump upload info instead
my $cgi = Bugzilla->cgi;
- my $cgivars = { $cgi->Vars };
+ my $cgivars = Bugzilla->input_params;
for (keys %$cgivars)
{
$cgivars->{$_} = $cgi->uploadInfo($cgivars->{$_}) if $cgi->upload($_);
diff --git a/Bugzilla/Field.pm b/Bugzilla/Field.pm
index 3abedc04a..68385e61b 100644
--- a/Bugzilla/Field.pm
+++ b/Bugzilla/Field.pm
@@ -1270,7 +1270,7 @@ sub bug_or_hash_value
{
# Hashref with value names
$value = $bug->{$vf->name};
- if (!ref $value)
+ if (!ref $value && defined $value)
{
# FIXME: This does not allow selecting of fields
# non-uniquely identified by name, as a visibility
diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm
index 9138429cf..ba0abee64 100644
--- a/Bugzilla/User.pm
+++ b/Bugzilla/User.pm
@@ -166,14 +166,6 @@ sub is_super_user
return $self eq $SUPERUSER;
}
-sub create
-{
- my $self = shift;
- my ($params) = @_;
- $params->{is_enabled} = !defined $params->{disabledtext} || $params->{disabledtext} eq '';
- $self->SUPER::create($params);
-}
-
sub update
{
my $self = shift;
@@ -1283,6 +1275,7 @@ sub match {
sub match_field {
my $fields = shift; # arguments as a hash
my $data = shift || Bugzilla->input_params; # hash to look up fields in
+ my $cgi = $data eq Bugzilla->input_params ? Bugzilla->cgi : undef;
my $behavior = shift || 0; # A constant that tells us how to act
my $matches = {}; # the values sent to the template
my $matchsuccess = 1; # did the match fail?
@@ -1334,6 +1327,7 @@ sub match_field {
# has been deleted (may occur in race conditions).
delete $expanded_fields->{$field_name};
delete $data->{$field_name};
+ $cgi->delete($field_name) if $cgi;
}
}
}
@@ -1363,12 +1357,14 @@ sub match_field {
# We will repopulate it later if a match is found, else it must
# be set to an empty string so that the field remains defined.
$data->{$field} = '';
+ $cgi->param($field, '') if $cgi;
}
elsif ($fields->{$field}->{'type'} eq 'multi') {
@queries = split(/[\s,;]+/, $raw_field);
# We will repopulate it later if a match is found, else it must
# be undefined.
delete $data->{$field};
+ $cgi->delete($field) if $cgi;
}
else {
# bad argument
@@ -1440,9 +1436,11 @@ sub match_field {
# field was defined or not (and it was if we came here).
if ($fields->{$field}->{'type'} eq 'single') {
$data->{$field} = $logins[0] || '';
+ $cgi->param($field, $logins[0] || '') if $cgi;
}
elsif (scalar @logins) {
$data->{$field} = \@logins;
+ $cgi->param($field, @logins) if $cgi;
}
}
@@ -1462,8 +1460,6 @@ sub match_field {
return wantarray ? ($retval, \@non_conclusive_fields) : $retval;
}
- my $template = Bugzilla->template;
- my $cgi = Bugzilla->cgi;
my $vars = {};
$vars->{'script'} = $cgi->url(-relative => 1); # for self-referencing URLs
@@ -1472,10 +1468,8 @@ sub match_field {
$vars->{'matchsuccess'} = $matchsuccess; # continue or fail
$vars->{'matchmultiple'} = $match_multiple;
- $cgi->send_header();
-
- $template->process("global/confirm-user-match.html.tmpl", $vars)
- || ThrowTemplateError($template->error());
+ Bugzilla->template->process("global/confirm-user-match.html.tmpl", $vars)
+ || ThrowTemplateError(Bugzilla->template->error());
exit;
}
@@ -1761,13 +1755,17 @@ sub get_userlist
sub create
{
- my $invocant = shift;
- my $class = ref($invocant) || $invocant;
+ my $class = shift;
+ $class = ref($class) || $class;
+
+ my ($params) = @_;
my $dbh = Bugzilla->dbh;
+ $params->{is_enabled} = !defined $params->{disabledtext} || $params->{disabledtext} eq '';
+
$dbh->bz_start_transaction();
- my $user = $class->SUPER::create(@_);
+ my $user = $class->SUPER::create($params);
# Turn on all email for the new user
foreach my $rel (RELATIONSHIPS) {
diff --git a/Bugzilla/Util.pm b/Bugzilla/Util.pm
index 99bce9a49..1f0f17ed4 100644
--- a/Bugzilla/Util.pm
+++ b/Bugzilla/Util.pm
@@ -79,6 +79,7 @@ eval { require 'Lingua/Stem/Snowball.pm' };
sub is_tainted
{
+ no warnings;
return !eval { join('', @_), kill 0; 1; };
}
@@ -452,9 +453,9 @@ sub makeCitations
for (split /\n/, $input)
{
s/^((?:\s*>)+ ?)?//s;
- $re = ($1 =~ tr/&/&/);
if ($_)
{
+ $re = (($1 || '') =~ tr/&/&/);
$text .= ("
\n" x ($re-$last)) .
("
\n" x ($last-$re)) . $_ . "\n";
$last = $re;
diff --git a/buglist.cgi b/buglist.cgi
index b75e3ef69..ccdd9ae0e 100755
--- a/buglist.cgi
+++ b/buglist.cgi
@@ -59,7 +59,7 @@ my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;
my $template = Bugzilla->template;
my $vars = {};
-my $ARGS = { %{ $cgi->Vars } };
+my $ARGS = Bugzilla->input_params;
my $query_format = $ARGS->{query_format} || 'advanced';
# We have to check the login here to get the correct footer if an error is
diff --git a/editcheckers.cgi b/editcheckers.cgi
index 4d9775a37..38d046a02 100755
--- a/editcheckers.cgi
+++ b/editcheckers.cgi
@@ -15,8 +15,7 @@ use Bugzilla::Token;
my $template = Bugzilla->template;
my $user = Bugzilla->login(LOGIN_REQUIRED);
-my $cgi = Bugzilla->cgi;
-my $params = { %{ $cgi->Vars } };
+my $params = Bugzilla->input_params;
my $vars = {};
$user->in_group('bz_editcheckers') || ThrowUserError('auth_failure', {
@@ -91,7 +90,7 @@ if ($params->{save})
{
Bugzilla->dbh->do('DELETE FROM checkers WHERE id=?', undef, $id);
}
- print $cgi->redirect(-location => 'editcheckers.cgi');
+ print Bugzilla->cgi->redirect(-location => 'editcheckers.cgi');
exit;
}
diff --git a/editcomponents.cgi b/editcomponents.cgi
index 3837aa2b2..45185b5d4 100755
--- a/editcomponents.cgi
+++ b/editcomponents.cgi
@@ -41,7 +41,7 @@ my $vars = {};
# so all actions point to the same page.
$vars->{'doc_section'} = 'components.html';
-my $ARGS = { %{ $cgi->Vars } };
+my $ARGS = Bugzilla->input_params;
#
# Preliminary checks:
diff --git a/editemailin.cgi b/editemailin.cgi
index 652467307..04095e5a4 100755
--- a/editemailin.cgi
+++ b/editemailin.cgi
@@ -1,5 +1,7 @@
#!/usr/bin/perl -wT
-# -*- Mode: perl; indent-tabs-mode: nil -*-
+# Preset field editor for incoming email
+# License: Dual-license GPL 3.0+ or MPL 1.1+
+# Author(s): Vitaliy Filippov
use strict;
use lib qw(. lib);
@@ -11,11 +13,11 @@ use Bugzilla::User;
use Bugzilla::Util;
use Mail::RFC822::Address qw(valid);
-my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;
my $user = Bugzilla->login(LOGIN_REQUIRED);
my $template = Bugzilla->template;
my $userid = $user->id;
+my $params = Bugzilla->input_params;
unless ($user->in_group('admin'))
{
@@ -26,16 +28,6 @@ unless ($user->in_group('admin'))
});
}
-my $params = {};
-for ($cgi->param)
-{
- if (defined $cgi->param($_))
- {
- $params->{$_} = $cgi->param($_);
- trick_taint($params->{$_});
- }
-}
-
my $vars = {
mode_add => $params->{add} ? 1 : 0,
email => $params->{email} || '',
@@ -52,7 +44,7 @@ if ($params->{do})
{
$dbh->do("INSERT INTO `emailin_fields` SET `address`=?, `field`=?, `value`=?",
undef, $e, $f, $v);
- print $cgi->redirect(-location => "editemailin.cgi");
+ print Bugzilla->cgi->redirect(-location => "editemailin.cgi");
exit;
}
else
@@ -89,7 +81,7 @@ if ($params->{do})
join(",", ("(?,?)") x @$del) . ")", undef, map { @$_ } @$del
);
}
- print $cgi->redirect(-location => "editemailin.cgi");
+ print Bugzilla->cgi->redirect(-location => "editemailin.cgi");
exit;
}
}
diff --git a/editmilestones.cgi b/editmilestones.cgi
index cfab7babe..c16fd97f6 100755
--- a/editmilestones.cgi
+++ b/editmilestones.cgi
@@ -37,7 +37,7 @@ my $vars = {};
# so all actions point to the same page.
$vars->{'doc_section'} = 'milestones.html';
-my $ARGS = { %{ $cgi->Vars } };
+my $ARGS = Bugzilla->input_params;
#
# Preliminary checks:
diff --git a/editproducts.cgi b/editproducts.cgi
index 52601fb09..009b4b6b3 100755
--- a/editproducts.cgi
+++ b/editproducts.cgi
@@ -49,7 +49,7 @@ my $vars = {};
# improved and each action has its own section.
$vars->{doc_section} = 'products.html';
-my $ARGS = { %{ $cgi->Vars } };
+my $ARGS = Bugzilla->input_params;
$user->in_group('editcomponents') ||
scalar(@{$user->get_editable_products}) ||
diff --git a/editversions.cgi b/editversions.cgi
index 820ea6447..decf9b324 100755
--- a/editversions.cgi
+++ b/editversions.cgi
@@ -41,7 +41,7 @@ my $vars = {};
# so all actions point to the same page.
$vars->{'doc_section'} = 'versions.html';
-my $ARGS = { %{ $cgi->Vars } };
+my $ARGS = Bugzilla->input_params;
#
# Preliminary checks:
diff --git a/editvisibility.cgi b/editvisibility.cgi
index 376570f75..1cc677466 100755
--- a/editvisibility.cgi
+++ b/editvisibility.cgi
@@ -15,7 +15,7 @@ use Bugzilla::Field;
use Bugzilla::Field::Choice;
use Bugzilla::Token;
-my $ARGS = { %{ Bugzilla->cgi->Vars } };
+my $ARGS = Bugzilla->input_params;
my $template = Bugzilla->template;
my $vars = {};
diff --git a/email_in.pl b/email_in.pl
index b0f69026a..b0425aec1 100755
--- a/email_in.pl
+++ b/email_in.pl
@@ -89,7 +89,7 @@ sub parse_mail
# to delivery status reports, so also check content-type.
my $autosubmitted;
if (lc($input_email->header('Auto-Submitted') || 'no') ne 'no' ||
- $input_email->header('X-Auto-Response-Suppress') =~ /all/iso ||
+ ($input_email->header('X-Auto-Response-Suppress') || '') =~ /all/iso ||
($input_email->header('Content-Type') || '') =~ /delivery-status/iso)
{
debug_print("Rejecting email with Auto-Submitted = $autosubmitted");
@@ -113,8 +113,9 @@ sub parse_mail
$fields{_subject} = $summary;
# Add CC's from email Cc: header
- $fields{newcc} = (join ', ', map { [ Email::Address->parse($_) ] -> [0] }
- split /\s*,\s*/, $input_email->header('Cc')) || undef;
+ $fields{newcc} = $input_email->header('Cc');
+ $fields{newcc} = $fields{newcc} && (join ', ', map { [ Email::Address->parse($_) ] -> [0] }
+ split /\s*,\s*/, $fields{newcc}) || undef;
my ($body, $attachments) = get_body_and_attachments($input_email);
if (@$attachments)
@@ -128,6 +129,8 @@ sub parse_mail
Bugzilla::Hook::process("emailin-filter_body", { body => \$body });
my @body_lines = split(/\r?\n/s, $body);
+ my $fields_by_name = { map { (lc($_->description) => $_->name, lc($_->name) => $_->name) } Bugzilla->get_fields({ obsolete => 0 }) };
+
# If there are fields specified.
if ($body =~ /^\s*@/s)
{
@@ -145,9 +148,9 @@ sub parse_mail
# Otherwise, we stop parsing fields on the first blank line.
$line = trim($line);
last if !$line;
- if ($line =~ /^\@(\w+)\s*(?:=|\s|$)\s*(.*)\s*/)
+ if ($line =~ /^\@\s*(.+?)\s*=\s*(.*)\s*/)
{
- $current_field = lc($1);
+ $current_field = $fields_by_name->{lc($1)} || lc($1);
$fields{$current_field} = $2;
}
else
@@ -202,6 +205,7 @@ sub post_bug
my ($fields) = @_;
debug_print('Posting a new bug...');
my $bug;
+ $Bugzilla::Error::IN_EVAL++;
eval
{
my ($retval, $non_conclusive_fields) =
@@ -216,6 +220,7 @@ sub post_bug
}
$bug = Bugzilla::Bug::create_or_update($fields);
};
+ $Bugzilla::Error::IN_EVAL--;
if (my $err = $@)
{
my $format = "\n\nIncoming mail format for entering bugs:\n\n\@field = value\n\@field = value\n...\n\n\n";
@@ -406,6 +411,7 @@ sub die_handler
# Use UTF-8 in Email::Reply to correctly quote the body
my $crlf = "\x0d\x0a";
my $CRLF = $crlf;
+undef *Email::Reply::_quote_body;
*Email::Reply::_quote_body = sub
{
my ($self, $part) = @_;
@@ -500,20 +506,6 @@ unless ($user)
Bugzilla->set_user($user);
-if ($mail_fields->{group_ids})
-{
- my @grp = $mail_fields->{group_ids} =~ /\d+/gso;
- if (@grp)
- {
- Bugzilla->dbh->do(
- "REPLACE INTO user_group_map (user_id, group_id, isbless, grant_type)
- VALUES ".join(", ", ("(?,?,0,0)") x scalar @grp),
- undef, map { $user->id, $_ } @grp
- );
- }
- delete $mail_fields->{group_ids};
-}
-
my ($bug, $comment);
if ($mail_fields->{bug_id})
{
diff --git a/extensions/Example/Extension.pm b/extensions/Example/Extension.pm
index af123a088..2289ff533 100644
--- a/extensions/Example/Extension.pm
+++ b/extensions/Example/Extension.pm
@@ -472,7 +472,7 @@ sub page_before_template {
# You can see this hook in action by loading page.cgi?id=example.html
if ($page eq 'example.html') {
- $vars->{cgi_variables} = { Bugzilla->cgi->Vars };
+ $vars->{cgi_variables} = Bugzilla->input_params;
}
}
diff --git a/extensions/Example/code/page-before_template.pl b/extensions/Example/code/page-before_template.pl
index dcf059367..31283d0de 100644
--- a/extensions/Example/code/page-before_template.pl
+++ b/extensions/Example/code/page-before_template.pl
@@ -29,5 +29,5 @@ my ($vars, $page) = @args{qw(vars page_id)};
# You can see this hook in action by loading page.cgi?id=example.html
if ($page eq 'example.html') {
- $vars->{cgi_variables} = { Bugzilla->cgi->Vars };
+ $vars->{cgi_variables} = Bugzilla->input_params;
}
diff --git a/fieldvaluecontrol.cgi b/fieldvaluecontrol.cgi
index 24ec807e2..89d3639cc 100755
--- a/fieldvaluecontrol.cgi
+++ b/fieldvaluecontrol.cgi
@@ -13,7 +13,7 @@ use Bugzilla;
use Bugzilla::Util;
use Bugzilla::Constants;
-my $args = { %{ Bugzilla->cgi->Vars } };
+my $args = Bugzilla->input_params;
my $user = Bugzilla->login(~LOGIN_REQUIRED);
my $ctype = 'text/javascript'.(Bugzilla->params->{utf8} ? '; charset=utf-8' : '');
diff --git a/fill-day-worktime.cgi b/fill-day-worktime.cgi
index 113e2ba10..4cbc1773c 100755
--- a/fill-day-worktime.cgi
+++ b/fill-day-worktime.cgi
@@ -23,7 +23,7 @@ my $userid = $user->id;
my $template = Bugzilla->template;
my $dbh = Bugzilla->dbh;
my $vars = {};
-my $ARGS = { %{ Bugzilla->cgi->Vars } };
+my $ARGS = Bugzilla->input_params;
my ($lastdays) = $ARGS->{lastdays} =~ /^(\d+)$/;
$vars->{lastdays} = $lastdays ||= '1';
diff --git a/globalauth.cgi b/globalauth.cgi
index 8e353a24e..94a7a5811 100755
--- a/globalauth.cgi
+++ b/globalauth.cgi
@@ -20,8 +20,7 @@ use JSON;
my $gc_prob = 0.01;
-my $cgi = Bugzilla->cgi;
-my $args = { %{ $cgi->Vars } };
+my $args = Bugzilla->input_params;
my $check = $args->{ga_check} ? 1 : 0; # если 1 и пользователь не вошёл, входа не требовать
# требуем входа, если пришёл пользователь (в запросе нет ключа) и в запросе не сказано "не требовать входа"
@@ -45,7 +44,7 @@ if (($id = $args->{ga_id}) && !$args->{ga_client})
{
trick_taint($key);
$dbh->do("REPLACE INTO globalauth SET id=?, secret=?, expire=?", undef, $id, $key, time+$expire);
- $cgi->send_header;
+ Bugzilla->cgi->send_header;
print "1"; # потенциально здесь любой JSON
exit;
}
@@ -66,7 +65,7 @@ if (($id = $args->{ga_id}) && !$args->{ga_client})
if (!$url)
{
# ошибко :(
- $cgi->send_header;
+ Bugzilla->cgi->send_header;
print "Global Auth: No ga_url in request for ID=$id";
warn "Global Auth: No ga_url in request for ID=$id";
exit;
@@ -125,7 +124,7 @@ if (($id = $args->{ga_id}) && !$args->{ga_client})
$url->query_param(ga_res => $res->code);
}
$dbh->do("DELETE FROM globalauth WHERE id=?", undef, $id);
- print $cgi->redirect(-location => "$url");
+ print Bugzilla->cgi->redirect(-location => "$url");
exit;
}
else
diff --git a/importxls.cgi b/importxls.cgi
index 05035f93c..9d600eb7f 100755
--- a/importxls.cgi
+++ b/importxls.cgi
@@ -28,11 +28,10 @@ use constant BUG_DAYS => 92;
use constant XLS_LISTNAME => '';
my $user = Bugzilla->login(LOGIN_REQUIRED);
-my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;
my $template = Bugzilla->template;
my $vars = {};
-my $ARGS = { %{ $cgi->Vars } };
+my $ARGS = Bugzilla->input_params;
# Check permissions
$user->in_group('importxls') ||
@@ -232,7 +231,7 @@ else
# Send bugmail only after successful completion
Bugzilla->send_mail;
Bugzilla->dbh->bz_commit_transaction;
- print $cgi->redirect(-location => 'importxls.cgi?'.http_build_query({
+ print Bugzilla->cgi->redirect(-location => 'importxls.cgi?'.http_build_query({
result => $r,
bug_id => $ids,
listname => $listname,
diff --git a/post_bug.cgi b/post_bug.cgi
index e839b9438..a75b44761 100755
--- a/post_bug.cgi
+++ b/post_bug.cgi
@@ -208,8 +208,7 @@ for (keys %$ARGS)
if ($is_multiple)
{
- my $send_attrs = {};
- Bugzilla::Attachment::add_multiple($bug, $cgi, $send_attrs);
+ Bugzilla::Attachment::add_multiple($bug);
}
elsif (defined($cgi->upload('data')) || $ARGS->{attachurl} ||
$ARGS->{text_attachment} || $ARGS->{base64_content})
diff --git a/process_bug.cgi b/process_bug.cgi
index 1b956e2bc..f8072f17f 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -70,7 +70,7 @@ my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;
my $template = Bugzilla->template;
my $vars = {};
-my $ARGS = { %{ $cgi->Vars } };
+my $ARGS = Bugzilla->input_params;
#my $ARGS = $cgi->VarHash; # FIXME (see lines with "FIXME array[]")
######################################################################
@@ -637,7 +637,7 @@ foreach my $bug (@bug_objects)
# CustIS Bug 68919 - Create multiple attachments to bug
if (@bug_objects == 1)
{
- Bugzilla::Attachment::add_multiple($first_bug, $cgi);
+ Bugzilla::Attachment::add_multiple($first_bug);
}
$dbh->bz_commit_transaction();
diff --git a/query.cgi b/query.cgi
index 6992c7868..f5fee737c 100755
--- a/query.cgi
+++ b/query.cgi
@@ -42,8 +42,7 @@ use Bugzilla::Field;
use Bugzilla::Install::Util qw(vers_cmp);
my $cgi = Bugzilla->cgi;
-# Copy hash and throw away tied reference returned by Vars()
-my $params = { %{ $cgi->Vars } };
+my $params = Bugzilla->input_params;
my $dbh = Bugzilla->dbh;
my $template = Bugzilla->template;
my $vars = {};
diff --git a/report.cgi b/report.cgi
index e7b79c00e..d4c7603bd 100755
--- a/report.cgi
+++ b/report.cgi
@@ -187,7 +187,7 @@ push @axis_fields, $measures->{$measure} unless $a{$measures->{$measure}};
# Clone the params, so that Bugzilla::Search can modify them
my $search = new Bugzilla::Search(
'fields' => \@axis_fields,
- 'params' => { %{ $cgi->Vars } },
+ 'params' => { %{ Bugzilla->input_params } },
);
my $query = $search->getSQL();
$query =
diff --git a/rss-comments.cgi b/rss-comments.cgi
index 2ed34c1a4..008ae93f0 100755
--- a/rss-comments.cgi
+++ b/rss-comments.cgi
@@ -22,7 +22,7 @@ my $vars = {};
my $template = Bugzilla->template;
my $dbh = Bugzilla->dbh;
-my $ARGS = { %{ Bugzilla->cgi->Vars } };
+my $ARGS = Bugzilla->input_params;
$vars->{buginfo} = $ARGS->{buginfo};
diff --git a/scrum.cgi b/scrum.cgi
index f24c61b06..23175bd2b 100755
--- a/scrum.cgi
+++ b/scrum.cgi
@@ -9,9 +9,8 @@ use Bugzilla::Util qw(trim html_quote);
use Scalar::Util qw(blessed);
use Bugzilla::Error;
-my $cgi = Bugzilla->cgi;
my $user = Bugzilla->login;
-my $args = { %{ $cgi->Vars } };
+my $args = Bugzilla->input_params;
my $vars = {};
# Default $Layout settings
diff --git a/xml.cgi b/xml.cgi
index 02f1b6f8b..0221363fd 100755
--- a/xml.cgi
+++ b/xml.cgi
@@ -15,9 +15,7 @@ use Bugzilla::Constants;
use Bugzilla::Util;
use Bugzilla::WebService::Server::XMLSimple;
-my $cgi = Bugzilla->cgi;
-
-my $args = { %{ $cgi->Vars } }; # throw away the tied hash
+my $args = Bugzilla->input_params;
my $method = $args->{method};
sub addmsg
@@ -42,13 +40,13 @@ if (!$method)
# Convert comma/space separated elements into separate params
my @ids = ();
- if (defined $cgi->param('id')) {
- @ids = split (/[, ]+/, $cgi->param('id'));
+ if (defined $args->{id}) {
+ @ids = ref $args->{id} ? @{$args->{id}} : split(/[, ]+/, $args->{id});
}
my $ids = join('', map { $_ = "&id=" . $_ } @ids);
- print $cgi->redirect("show_bug.cgi?ctype=xml$ids");
+ print Bugzilla->cgi->redirect("show_bug.cgi?ctype=xml$ids");
}
else
{