[BUGFIX][Cache][PDO] Duplicate cache entry possible 98/18098/2
authorLeon Dietsch <leon.dietsch@googlemail.com>
Tue, 27 Nov 2012 01:12:52 +0000 (02:12 +0100)
committerChristian Kuhn <lolli@schwarzbu.ch>
Thu, 7 Feb 2013 21:48:38 +0000 (22:48 +0100)
commitc7582d8c8c2d77f1a2684558ba25d50def1f5114
tree1bb7b0403cd72d25908d1edebd130aebb781b0f4
parenta628b90954bc3d2b2ed9aac4a3c9f673b7dd7b5c
[BUGFIX][Cache][PDO] Duplicate cache entry possible

An identifier must be unique in the database. If some entry is set(),
the PdoBackend removes any entry with a given identifier if the cache
entry exists already. The remove() call is encapsulated with has(),
but has() returns FALSE if a cache entry is expired, so entries with
expired lifetime are not removed properly.
This leads to a \PDOException because of duplicate identifier.

The patch removes the check to has(), so set() will also remove
expired cache entries with this identifier before creating a new one.

Change-Id: Ife4e35223394805fc6d9e0b820a5d42789133f7b
Fixes: #34129
Releases: 6.1, 6.0, 4.7, 4.6, 4.5
Reviewed-on: https://review.typo3.org/18098
Reviewed-by: Christian Kuhn
Tested-by: Christian Kuhn
typo3/sysext/core/Classes/Cache/Backend/PdoBackend.php
typo3/sysext/core/Tests/Unit/Cache/Backend/PdoBackendTest.php