From 023ad33eda1a32099f1309e8da70464c7f0c1e6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Deruss=C3=A9?= Date: Wed, 21 Jul 2021 11:54:21 +0200 Subject: [PATCH] Handle lock with long key --- Store/FlockStore.php | 2 +- Tests/Store/FlockStoreTest.php | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Store/FlockStore.php b/Store/FlockStore.php index 58764ef..fa128c3 100644 --- a/Store/FlockStore.php +++ b/Store/FlockStore.php @@ -74,7 +74,7 @@ private function lock(Key $key, bool $blocking) $fileName = sprintf('%s/sf.%s.%s.lock', $this->lockPath, - preg_replace('/[^a-z0-9\._-]+/i', '-', $key), + substr(preg_replace('/[^a-z0-9\._-]+/i', '-', $key), 0, 50), strtr(substr(base64_encode(hash('sha256', $key, true)), 0, 7), '/', '_') ); diff --git a/Tests/Store/FlockStoreTest.php b/Tests/Store/FlockStoreTest.php index 9ca9a43..1aab1a3 100644 --- a/Tests/Store/FlockStoreTest.php +++ b/Tests/Store/FlockStoreTest.php @@ -73,4 +73,25 @@ public function testSaveSanitizeName() $store->delete($key); } + + public function testSaveSanitizeLongName() + { + $store = $this->getStore(); + + $key = new Key(str_repeat(__CLASS__, 100)); + + $file = sprintf( + '%s/sf.Symfony-Component-Lock-Tests-Store-FlockStoreTestS.%s.lock', + sys_get_temp_dir(), + strtr(substr(base64_encode(hash('sha256', $key, true)), 0, 7), '/', '_') + ); + // ensure the file does not exist before the store + @unlink($file); + + $store->save($key); + + $this->assertFileExists($file); + + $store->delete($key); + } }