From: Aaron Schulz Date: Wed, 22 May 2019 16:58:10 +0000 (-0700) Subject: objectcache: check apc.serializer in APCBagOStuff like APCUBagOStuff X-Git-Tag: 1.34.0-rc.0~1629^2 X-Git-Url: http://git.cyclocoop.org/fichier?a=commitdiff_plain;h=7234e8d78a4e75fd369a2d0f97840d2b6ac6a8f2;p=lhc%2Fweb%2Fwiklou.git objectcache: check apc.serializer in APCBagOStuff like APCUBagOStuff This mirrors a1389b602411 Change-Id: Iad6b104337dfd38c74f363ce76c36aedcc3da425 --- diff --git a/includes/libs/objectcache/APCBagOStuff.php b/includes/libs/objectcache/APCBagOStuff.php index 9a5a433c66..5a36c651e7 100644 --- a/includes/libs/objectcache/APCBagOStuff.php +++ b/includes/libs/objectcache/APCBagOStuff.php @@ -34,18 +34,27 @@ * @ingroup Cache */ class APCBagOStuff extends BagOStuff { + /** @var bool Whether to trust the APC implementation to serialization */ + private $nativeSerialize; + /** * @var string String to append to each APC key. This may be changed * whenever the handling of values is changed, to prevent existing code * from encountering older values which it cannot handle. */ - const KEY_SUFFIX = ':3'; + const KEY_SUFFIX = ':4'; + + public function __construct( array $params = [] ) { + parent::__construct( $params ); + // The extension serializer is still buggy, unlike "php" and "igbinary" + $this->nativeSerialize = ( ini_get( 'apc.serializer' ) !== 'default' ); + } protected function doGet( $key, $flags = 0, &$casToken = null ) { $casToken = null; $blob = apc_fetch( $key . self::KEY_SUFFIX ); - $value = $this->unserialize( $blob ); + $value = $this->nativeSerialize ? $blob : $this->unserialize( $blob ); if ( $value !== false ) { $casToken = $blob; // don't bother hashing this } @@ -56,7 +65,7 @@ class APCBagOStuff extends BagOStuff { public function set( $key, $value, $exptime = 0, $flags = 0 ) { apc_store( $key . self::KEY_SUFFIX, - $this->serialize( $value ), + $this->nativeSerialize ? $value : $this->serialize( $value ), $exptime ); @@ -66,7 +75,7 @@ class APCBagOStuff extends BagOStuff { public function add( $key, $value, $exptime = 0, $flags = 0 ) { return apc_add( $key . self::KEY_SUFFIX, - $this->serialize( $value ), + $this->nativeSerialize ? $value : $this->serialize( $value ), $exptime ); } diff --git a/includes/libs/objectcache/APCUBagOStuff.php b/includes/libs/objectcache/APCUBagOStuff.php index eba0af50f8..0d9822a147 100644 --- a/includes/libs/objectcache/APCUBagOStuff.php +++ b/includes/libs/objectcache/APCUBagOStuff.php @@ -46,7 +46,7 @@ class APCUBagOStuff extends BagOStuff { public function __construct( array $params = [] ) { parent::__construct( $params ); - // The extension serialize is still buggy, unlike "php" and "igbinary" + // The extension serializer is still buggy, unlike "php" and "igbinary" $this->nativeSerialize = ( ini_get( 'apc.serializer' ) !== 'default' ); }