From eb0a3b78300cd1de8276a76f9b7ee11e6a60e226 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Fri, 27 Jun 2014 01:03:22 +0200 Subject: [PATCH] objectcache: Actually unserialize integers as integers in RedisBagOStuff Before: > SET (stored) GET > 5 5 (string) "5" > '5' 5 (string) "5" > 'x' s:1:"x"; (string) "x" After: > SET (stored) GET > 5 5 (int) 5 > '5' s:1:"5"; (string) "5" > 'x' s:1:"x"; (string) "x" Follows-up 2ceda41c5783ddc3cfb. Bug: 60563 Change-Id: I2bb09381b2bb733ac5a89175e053cb10eca68b08 --- includes/objectcache/RedisBagOStuff.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/includes/objectcache/RedisBagOStuff.php b/includes/objectcache/RedisBagOStuff.php index e770b73886..825c77b1e6 100644 --- a/includes/objectcache/RedisBagOStuff.php +++ b/includes/objectcache/RedisBagOStuff.php @@ -322,14 +322,14 @@ class RedisBagOStuff extends BagOStuff { $this->logRequest( 'incr', $key, $server, $result ); return $result; } - /** * @param mixed $data * @return string */ protected function serialize( $data ) { - // Ignore digit strings and ints so INCR/DECR work - return ( is_int( $data ) || ctype_digit( $data ) ) ? $data : serialize( $data ); + // Serialize anything but integers so INCR/DECR work + // Do not store integer-like strings as integers to avoid type confusion (bug 60563) + return is_int( $data ) ? $data : serialize( $data ); } /** @@ -337,8 +337,7 @@ class RedisBagOStuff extends BagOStuff { * @return mixed */ protected function unserialize( $data ) { - // Ignore digit strings and ints so INCR/DECR work - return ( is_int( $data ) || ctype_digit( $data ) ) ? $data : unserialize( $data ); + return ctype_digit( $data ) ? intval( $data ) : unserialize( $data ); } /** -- 2.20.1