From 70c2223843b6e7e41457ec6469c3f34a3860cd59 Mon Sep 17 00:00:00 2001 From: Chad Horohoe Date: Tue, 6 Dec 2016 12:42:49 -0800 Subject: [PATCH] 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 --- includes/libs/MapCacheLRU.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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; } -- 2.20.1