From: Chad Horohoe Date: Tue, 6 Dec 2016 20:42:49 +0000 (-0800) Subject: MapCacheLRU: Properly handle bogus cache keys X-Git-Tag: 1.31.0-rc.0~4656^2 X-Git-Url: http://git.cyclocoop.org/?a=commitdiff_plain;h=70c2223843b6e7e41457ec6469c3f34a3860cd59;p=lhc%2Fweb%2Fwiklou.git MapCacheLRU: Properly handle bogus cache keys They can only be strings or integers. Anything else is wrong. We should be throwing exceptions here so developers find this early when running tests and manual testing. Exceptions (instead of warnings) allow us to get a full useful stacktrace. Change-Id: I823ce33523283509c14a05f816f261d6b400e243 --- diff --git a/includes/libs/MapCacheLRU.php b/includes/libs/MapCacheLRU.php index 2f5a454f5d..db6869bd53 100644 --- a/includes/libs/MapCacheLRU.php +++ b/includes/libs/MapCacheLRU.php @@ -58,7 +58,7 @@ class MapCacheLRU { * @return void */ public function set( $key, $value ) { - if ( array_key_exists( $key, $this->cache ) ) { + if ( $this->has( $key ) ) { $this->ping( $key ); } elseif ( count( $this->cache ) >= $this->maxCacheKeys ) { reset( $this->cache ); @@ -75,6 +75,9 @@ class MapCacheLRU { * @return bool */ public function has( $key ) { + if ( !is_int( $key ) && !is_string( $key ) ) { + throw new MWException( __METHOD__ . ' called with invalid key. Must be string or integer.' ); + } return array_key_exists( $key, $this->cache ); } @@ -87,7 +90,7 @@ class MapCacheLRU { * @return mixed Returns null if the key was not found */ public function get( $key ) { - if ( !array_key_exists( $key, $this->cache ) ) { + if ( !$this->has( $key ) ) { return null; }