From 5886e039ec9e30a469584209b121ba9d86f9c184 Mon Sep 17 00:00:00 2001 From: Chris Wharton Date: Thu, 18 Jul 2013 13:44:26 +1200 Subject: [PATCH 1/2] MDL-40700 cache: Validate memcache key prefix field --- cache/stores/memcache/addinstanceform.php | 3 ++- lang/en/cache.php | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/cache/stores/memcache/addinstanceform.php b/cache/stores/memcache/addinstanceform.php index 984966a8b56..bf03aaa0038 100644 --- a/cache/stores/memcache/addinstanceform.php +++ b/cache/stores/memcache/addinstanceform.php @@ -49,7 +49,8 @@ class cachestore_memcache_addinstance_form extends cachestore_addinstance_form { $form->addElement('text', 'prefix', get_string('prefix', 'cachestore_memcache'), array('maxlength' => 5, 'size' => 5)); $form->addHelpButton('prefix', 'prefix', 'cachestore_memcache'); - $form->setType('prefix', PARAM_ALPHAEXT); + $form->addRule('prefix', get_string('storeprefixinvalid', 'cache'), 'regex', '#^[a-zA-Z0-9\-_ ]+$#'); + $form->setType('prefix', PARAM_TEXT); $form->setDefault('prefix', 'mdl_'); } } \ No newline at end of file diff --git a/lang/en/cache.php b/lang/en/cache.php index 16620e735da..f457ee2bba6 100644 --- a/lang/en/cache.php +++ b/lang/en/cache.php @@ -100,6 +100,7 @@ $string['storename_help'] = 'This sets the store name. It is used to identify th $string['storenamealreadyused'] = 'You must choose a unique name for this store.'; $string['storenameinvalid'] = 'Invalid store name. You can only use a-z A-Z 0-9 -_ and spaces.'; $string['storeperformance'] = 'Cache store performance reporting - {$a} unique requests per operation.'; +$string['storeprefixinvalid'] = 'Invalid store prefix. You can only use a-z A-Z 0-9 -_ and spaces.'; $string['storeready'] = 'Ready'; $string['storenotready'] = 'Store not ready'; $string['storerequiresattention'] = 'Requires attention.'; From ad739cd700484e7ebb3f8c02d00d79fb30804629 Mon Sep 17 00:00:00 2001 From: Sam Hemelryk Date: Fri, 19 Jul 2013 12:47:23 +1200 Subject: [PATCH 2/2] MDL-40700 cache: memcache and memcached stores now allow alphanumext prefixes --- cache/stores/memcache/addinstanceform.php | 4 ++-- cache/stores/memcache/lang/en/cachestore_memcache.php | 1 + cache/stores/memcache/lib.php | 2 +- cache/stores/memcached/addinstanceform.php | 3 ++- cache/stores/memcached/lang/en/cachestore_memcached.php | 1 + cache/stores/memcached/lib.php | 2 +- lang/en/cache.php | 1 - 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/cache/stores/memcache/addinstanceform.php b/cache/stores/memcache/addinstanceform.php index bf03aaa0038..eb7c999a1be 100644 --- a/cache/stores/memcache/addinstanceform.php +++ b/cache/stores/memcache/addinstanceform.php @@ -49,8 +49,8 @@ class cachestore_memcache_addinstance_form extends cachestore_addinstance_form { $form->addElement('text', 'prefix', get_string('prefix', 'cachestore_memcache'), array('maxlength' => 5, 'size' => 5)); $form->addHelpButton('prefix', 'prefix', 'cachestore_memcache'); - $form->addRule('prefix', get_string('storeprefixinvalid', 'cache'), 'regex', '#^[a-zA-Z0-9\-_ ]+$#'); - $form->setType('prefix', PARAM_TEXT); + $form->setType('prefix', PARAM_TEXT); // We set to text but we have a rule to limit to alphanumext. $form->setDefault('prefix', 'mdl_'); + $form->addRule('prefix', get_string('prefixinvalid', 'cachestore_memcache'), 'regex', '#^[a-zA-Z0-9\-_]+$#'); } } \ No newline at end of file diff --git a/cache/stores/memcache/lang/en/cachestore_memcache.php b/cache/stores/memcache/lang/en/cachestore_memcache.php index 5cba887de78..fb87d289836 100644 --- a/cache/stores/memcache/lang/en/cachestore_memcache.php +++ b/cache/stores/memcache/lang/en/cachestore_memcache.php @@ -31,6 +31,7 @@ $string['prefix'] = 'Key prefix'; $string['prefix_help'] = 'This prefix is used for all key names on the memcache server. * If you only have one Moodle instance using this server, you can leave this value default. * Due to key length restrictions, a maximum of 5 characters is permitted.'; +$string['prefixinvalid'] = 'Invalid prefix. You can only use a-z A-Z 0-9-_.'; $string['servers'] = 'Servers'; $string['servers_help'] = 'This sets the servers that should be utilised by this memcache adapter. Servers should be defined one per line and consist of a server address and optionally a port and weight. diff --git a/cache/stores/memcache/lib.php b/cache/stores/memcache/lib.php index 882ab3775cb..2e104bd6385 100644 --- a/cache/stores/memcache/lib.php +++ b/cache/stores/memcache/lib.php @@ -404,7 +404,7 @@ class cachestore_memcache extends cache_store implements cache_is_configurable { * Generates an instance of the cache store that can be used for testing. * * @param cache_definition $definition - * @return false + * @return cachestore_memcache|false */ public static function initialise_test_instance(cache_definition $definition) { if (!self::are_requirements_met()) { diff --git a/cache/stores/memcached/addinstanceform.php b/cache/stores/memcached/addinstanceform.php index a8e98bf0f48..7d11f43e660 100644 --- a/cache/stores/memcached/addinstanceform.php +++ b/cache/stores/memcached/addinstanceform.php @@ -60,8 +60,9 @@ class cachestore_memcached_addinstance_form extends cachestore_addinstance_form $form->setType('serialiser', PARAM_NUMBER); $form->addElement('text', 'prefix', get_string('prefix', 'cachestore_memcached'), array('size' => 16)); - $form->setType('prefix', PARAM_ALPHANUM); + $form->setType('prefix', PARAM_TEXT); // We set to text but we have a rule to limit to alphanumext. $form->addHelpButton('prefix', 'prefix', 'cachestore_memcached'); + $form->addRule('prefix', get_string('prefixinvalid', 'cachestore_memcached'), 'regex', '#^[a-zA-Z0-9\-_]+$#'); $hashoptions = cachestore_memcached::config_get_hash_options(); $form->addElement('select', 'hash', get_string('hash', 'cachestore_memcached'), $hashoptions); diff --git a/cache/stores/memcached/lang/en/cachestore_memcached.php b/cache/stores/memcached/lang/en/cachestore_memcached.php index 67c3cd22ec2..87713f6755d 100644 --- a/cache/stores/memcached/lang/en/cachestore_memcached.php +++ b/cache/stores/memcached/lang/en/cachestore_memcached.php @@ -42,6 +42,7 @@ $string['hash_murmur'] = 'Murmur'; $string['pluginname'] = 'Memcached'; $string['prefix'] = 'Prefix key'; $string['prefix_help'] = 'This can be used to create a "domain" for your item keys allowing you to create multiple memcached stores on a single memcached installation. It cannot be longer than 16 characters in order to ensure key length issues are not encountered.'; +$string['prefixinvalid'] = 'Invalid prefix. You can only use a-z A-Z 0-9-_.'; $string['serialiser_igbinary'] = 'The igbinary serializer.'; $string['serialiser_json'] = 'The JSON serializer.'; $string['serialiser_php'] = 'The default PHP serializer.'; diff --git a/cache/stores/memcached/lib.php b/cache/stores/memcached/lib.php index 6e3834cce0f..696781ac8f2 100644 --- a/cache/stores/memcached/lib.php +++ b/cache/stores/memcached/lib.php @@ -444,7 +444,7 @@ class cachestore_memcached extends cache_store implements cache_is_configurable * Generates an instance of the cache store that can be used for testing. * * @param cache_definition $definition - * @return false + * @return cachestore_memcached|false */ public static function initialise_test_instance(cache_definition $definition) { diff --git a/lang/en/cache.php b/lang/en/cache.php index f457ee2bba6..16620e735da 100644 --- a/lang/en/cache.php +++ b/lang/en/cache.php @@ -100,7 +100,6 @@ $string['storename_help'] = 'This sets the store name. It is used to identify th $string['storenamealreadyused'] = 'You must choose a unique name for this store.'; $string['storenameinvalid'] = 'Invalid store name. You can only use a-z A-Z 0-9 -_ and spaces.'; $string['storeperformance'] = 'Cache store performance reporting - {$a} unique requests per operation.'; -$string['storeprefixinvalid'] = 'Invalid store prefix. You can only use a-z A-Z 0-9 -_ and spaces.'; $string['storeready'] = 'Ready'; $string['storenotready'] = 'Store not ready'; $string['storerequiresattention'] = 'Requires attention.';