]> source.dussan.org Git - nextcloud-server.git/commitdiff
memcached should not throw arbitrary exceptions 33078/head
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Fri, 17 Jun 2022 16:09:35 +0000 (18:09 +0200)
committerArthur Schiwon <blizzz@arthur-schiwon.de>
Thu, 30 Jun 2022 22:15:37 +0000 (00:15 +0200)
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
lib/private/Memcache/Memcached.php

index 84f220e8a17e7d2467313b75f5ab3fd1b2c4bc59..7d512d4d1ae8d3ce4c6c43db0491a23b293a6580 100644 (file)
@@ -63,7 +63,7 @@ class Memcached extends Cache implements IMemcache {
                                \Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
 
                                // Enable Binary Protocol
-                               \Memcached::OPT_BINARY_PROTOCOL =>      true,
+                               \Memcached::OPT_BINARY_PROTOCOL => true,
                        ];
                        /**
                         * By default enable igbinary serializer if available
@@ -119,10 +119,7 @@ class Memcached extends Cache implements IMemcache {
                } else {
                        $result = self::$cache->set($this->getNameSpace() . $key, $value);
                }
-               if ($result !== true) {
-                       $this->verifyReturnCode();
-               }
-               return $result;
+               return $result || $this->isSuccess();
        }
 
        public function hasKey($key) {
@@ -132,10 +129,7 @@ class Memcached extends Cache implements IMemcache {
 
        public function remove($key) {
                $result = self::$cache->delete($this->getNameSpace() . $key);
-               if (self::$cache->getResultCode() !== \Memcached::RES_NOTFOUND) {
-                       $this->verifyReturnCode();
-               }
-               return $result;
+               return $result || $this->isSuccess() || self::$cache->getResultCode() === \Memcached::RES_NOTFOUND;
        }
 
        public function clear($prefix = '') {
@@ -151,14 +145,10 @@ class Memcached extends Cache implements IMemcache {
         * @param mixed $value
         * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
         * @return bool
-        * @throws \Exception
         */
        public function add($key, $value, $ttl = 0) {
                $result = self::$cache->add($this->getPrefix() . $key, $value, $ttl);
-               if (self::$cache->getResultCode() !== \Memcached::RES_NOTSTORED) {
-                       $this->verifyReturnCode();
-               }
-               return $result;
+               return $result || $this->isSuccess();
        }
 
        /**
@@ -200,15 +190,7 @@ class Memcached extends Cache implements IMemcache {
                return extension_loaded('memcached');
        }
 
-       /**
-        * @throws \Exception
-        */
-       private function verifyReturnCode() {
-               $code = self::$cache->getResultCode();
-               if ($code === \Memcached::RES_SUCCESS) {
-                       return;
-               }
-               $message = self::$cache->getResultMessage();
-               throw new \Exception("Error $code interacting with memcached : $message");
+       private function isSuccess(): bool {
+               return self::$cache->getResultCode() === \Memcached::RES_SUCCESS;
        }
 }