diff --git a/src/Symfony/Component/Cache/Adapter/ArrayAdapter.php b/src/Symfony/Component/Cache/Adapter/ArrayAdapter.php index 660a52646ee4d..be12fb2995535 100644 --- a/src/Symfony/Component/Cache/Adapter/ArrayAdapter.php +++ b/src/Symfony/Component/Cache/Adapter/ArrayAdapter.php @@ -312,7 +312,7 @@ private function freeze($value, string $key): string|int|float|bool|array|\UnitE try { $serialized = serialize($value); } catch (\Exception $e) { - unset($this->values[$key], $this->tags[$key]); + unset($this->values[$key], $this->expiries[$key], $this->tags[$key]); $type = get_debug_type($value); $message = sprintf('Failed to save key "{key}" of type %s: %s', $type, $e->getMessage()); CacheItem::log($this->logger, $message, ['key' => $key, 'exception' => $e, 'cache-adapter' => get_debug_type($this)]); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php index c49cc3198b32e..59dc8b4a2c1f2 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php @@ -102,4 +102,17 @@ public function testEnum() $this->assertSame(TestEnum::Foo, $cache->getItem('foo')->get()); } + + public function testExpiryCleanupOnError() + { + $cache = new ArrayAdapter(); + + $item = $cache->getItem('foo'); + $this->assertTrue($cache->save($item->set('bar'))); + $this->assertTrue($cache->hasItem('foo')); + + $item->set(static fn () => null); + $this->assertFalse($cache->save($item)); + $this->assertFalse($cache->hasItem('foo')); + } }