summaryrefslogtreecommitdiffstats
path: root/Bugzilla
diff options
context:
space:
mode:
authorDylan William Hardison <dylan@hardison.net>2016-10-11 02:20:12 +0200
committerDylan William Hardison <dylan@hardison.net>2016-10-11 02:20:12 +0200
commit9f4d372fd34f67baa925787c74a625427a7315d7 (patch)
tree830347d330ebbc2e416759abc370985273536fba /Bugzilla
parentb14f11a156d7ccaf08985cc532789ffd240d9c4e (diff)
downloadbugzilla-9f4d372fd34f67baa925787c74a625427a7315d7.tar.gz
bugzilla-9f4d372fd34f67baa925787c74a625427a7315d7.tar.xz
Bug 1308032 - Cache::Memcached::Fast from bugzilla bug 1189281 and bug 1274764
Diffstat (limited to 'Bugzilla')
-rw-r--r--Bugzilla/Memcached.pm61
1 files changed, 6 insertions, 55 deletions
diff --git a/Bugzilla/Memcached.pm b/Bugzilla/Memcached.pm
index 1339a119c..cdadf4601 100644
--- a/Bugzilla/Memcached.pm
+++ b/Bugzilla/Memcached.pm
@@ -12,7 +12,6 @@ use strict;
use warnings;
use Bugzilla::Error;
-use Bugzilla::Util qw(trick_taint);
use Scalar::Util qw(blessed);
use URI::Escape;
use Encode;
@@ -30,13 +29,11 @@ sub _new {
# disabled.
my $servers = Bugzilla->get_param_with_override('memcached_servers');
if (Bugzilla->feature('memcached') && $servers) {
- require Cache::Memcached;
$self->{namespace} = Bugzilla->get_param_with_override('memcached_namespace');
- $self->{memcached} =
- Cache::Memcached->new({
- servers => [ split(/[, ]+/, $servers) ],
- namespace => $self->{namespace},
- });
+ $self->{memcached} = Cache::Memcached::Fast->new({
+ servers => [ split(/[, ]+/, $servers) ],
+ namespace => $self->{namespace},
+ });
}
return bless($self, $class);
}
@@ -249,51 +246,7 @@ sub _get {
$key = $self->_encode_key($key)
or return;
- my $value = $self->{memcached}->get($key);
- return unless defined $value;
-
- # detaint returned values
- # hashes and arrays are detainted just one level deep
- if (ref($value) eq 'HASH') {
- _detaint_hashref($value);
- }
- elsif (ref($value) eq 'ARRAY') {
- foreach my $value (@$value) {
- next unless defined $value;
- # arrays of hashes and arrays are common
- if (ref($value) eq 'HASH') {
- _detaint_hashref($value);
- }
- elsif (ref($value) eq 'ARRAY') {
- _detaint_arrayref($value);
- }
- elsif (!ref($value)) {
- trick_taint($value);
- }
- }
- }
- elsif (!ref($value)) {
- trick_taint($value);
- }
- return $value;
-}
-
-sub _detaint_hashref {
- my ($hashref) = @_;
- foreach my $value (values %$hashref) {
- if (defined($value) && !ref($value)) {
- trick_taint($value);
- }
- }
-}
-
-sub _detaint_arrayref {
- my ($arrayref) = @_;
- foreach my $value (@$arrayref) {
- if (defined($value) && !ref($value)) {
- trick_taint($value);
- }
- }
+ return $self->{memcached}->get($key);
}
sub _delete {
@@ -346,9 +299,7 @@ L<Bugzilla::Memcached> provides an interface to a Memcached server/servers, with
the ability to get, set, or clear entries from the cache.
The stored value must be an unblessed hashref, unblessed array ref, or a
-scalar. Currently nested data structures are supported but require manual
-de-tainting after reading from Memcached (flat data structures are automatically
-de-tainted).
+scalar.
All values are stored in the Memcached systems using the prefix configured with
the C<memcached_namespace> parameter, as well as an additional prefix managed