Browse Source

Allow special symbols in cache key using FileEngine

Edgaras Janušauskas 3 years ago
parent
commit
6043fee072
2 changed files with 8 additions and 29 deletions
  1. 1 9
      src/Cache/Engine/FileEngine.php
  2. 7 20
      tests/TestCase/Cache/Engine/FileEngineTest.php

+ 1 - 9
src/Cache/Engine/FileEngine.php

@@ -17,7 +17,6 @@ declare(strict_types=1);
 namespace Cake\Cache\Engine;
 
 use Cake\Cache\CacheEngine;
-use Cake\Cache\InvalidArgumentException;
 use CallbackFilterIterator;
 use Exception;
 use FilesystemIterator;
@@ -441,14 +440,7 @@ class FileEngine extends CacheEngine
     {
         $key = parent::_key($key);
 
-        if (preg_match('/[\/\\<>?:|*"]/', $key)) {
-            throw new InvalidArgumentException(
-                "Cache key `{$key}` contains invalid characters. " .
-                'You cannot use /, \\, <, >, ?, :, |, *, or " in cache keys.'
-            );
-        }
-
-        return $key;
+        return rawurlencode($key);
     }
 
     /**

+ 7 - 20
tests/TestCase/Cache/Engine/FileEngineTest.php

@@ -18,7 +18,6 @@ namespace Cake\Test\TestCase\Cache\Engine;
 
 use Cake\Cache\Cache;
 use Cake\Cache\Engine\FileEngine;
-use Cake\Cache\InvalidArgumentException;
 use Cake\Core\Configure;
 use Cake\TestSuite\TestCase;
 use DateInterval;
@@ -321,28 +320,16 @@ class FileEngineTest extends TestCase
         $result = Cache::read('views.countries.something', 'file_test');
         $this->assertSame('here', $result);
 
-        $result = Cache::clear('file_test');
+        $key = 'colon:quote"slash/brackets[]';
+        $result = Cache::write($key, 'here', 'file_test');
         $this->assertTrue($result);
-    }
+        $this->assertFileExists(TMP . 'tests/cake_colon%3Aquote%22slash%2Fbrackets%5B%5D');
 
-    /**
-     * Test invalid key() containing :
-     */
-    public function testInvalidKeyColon(): void
-    {
-        $this->expectException(InvalidArgumentException::class);
-        $this->expectExceptionMessage('contains invalid characters');
-        Cache::write('domain.test.com:8080', 'here', 'file_test');
-    }
+        $result = Cache::read($key, 'file_test');
+        $this->assertSame('here', $result);
 
-    /**
-     * Test invalid key() containing >
-     */
-    public function testInvalidKeyAngleBracket(): void
-    {
-        $this->expectException(InvalidArgumentException::class);
-        $this->expectExceptionMessage('contains invalid characters');
-        Cache::write('command>dir|more', 'here', 'file_test');
+        $result = Cache::clear('file_test');
+        $this->assertTrue($result);
     }
 
     /**