summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/Memcached.pm61
-rw-r--r--META.json4
-rw-r--r--META.yml4
-rw-r--r--Makefile.PL2
4 files changed, 11 insertions, 60 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
diff --git a/META.json b/META.json
index a853c4a2c..3f3c44b48 100644
--- a/META.json
+++ b/META.json
@@ -56,7 +56,7 @@
"runtime" : {
"requires" : {
"Auth::GoogleAuth" : "1.01",
- "Cache::Memcached" : "0.17",
+ "Cache::Memcached::Fast" : "0.17",
"Chart::Lines" : "v2.4.10",
"DBD::mysql" : "4.037",
"Daemon::Generic" : "0",
@@ -217,7 +217,7 @@
"prereqs" : {
"runtime" : {
"requires" : {
- "Cache::Memcached" : "0.17"
+ "Cache::Memcached::Fast" : "0.17"
}
}
}
diff --git a/META.yml b/META.yml
index 78810ed27..489cad1b0 100644
--- a/META.yml
+++ b/META.yml
@@ -37,7 +37,7 @@ optional_features:
description: 'features that bmo needs'
requires:
Auth::GoogleAuth: '1.01'
- Cache::Memcached: '0.17'
+ Cache::Memcached::Fast: '0.17'
Chart::Lines: v2.4.10
DBD::mysql: '4.037'
Daemon::Generic: '0'
@@ -126,7 +126,7 @@ optional_features:
memcached:
description: 'Memcached Support'
requires:
- Cache::Memcached: '0.17'
+ Cache::Memcached::Fast: '0.17'
mfa:
description: 'Multi-Factor Authentication'
requires:
diff --git a/Makefile.PL b/Makefile.PL
index f3b03f0db..a84aa1cdf 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -120,7 +120,7 @@ my %optional_features = (
memcached => {
description => 'Memcached Support',
prereqs => {
- runtime => { requires => { 'Cache::Memcached' => '0.17' } }
+ runtime => { requires => { 'Cache::Memcached::Fast' => '0.17' } }
}
},
auth_delegation => {