diff --git a/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php b/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php index 3060c829e6b5..09dd9c064d01 100644 --- a/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php +++ b/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php @@ -6806,30 +6806,36 @@ public function getTreeList($id, $depth, $begin = 0, $dontCheckEnableFields = fa $tsfe->gr_list ]; $requestHash = md5(serialize($parameters)); - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable('cache_treelist'); - $cacheEntry = $queryBuilder->select('treelist') + + $cacheTreeListConnection = GeneralUtility::makeInstance(ConnectionPool::class) + ->getConnectionForTable('cache_treelist'); + + $queryBuilder = $cacheTreeListConnection->createQueryBuilder(); + $query = $queryBuilder->select('treelist', 'expires') ->from('cache_treelist') ->where( $queryBuilder->expr()->eq( 'md5hash', $queryBuilder->createNamedParameter($requestHash, \PDO::PARAM_STR) - ), - $queryBuilder->expr()->orX( - $queryBuilder->expr()->gt( - 'expires', - $queryBuilder->createNamedParameter($GLOBALS['EXEC_TIME'], \PDO::PARAM_INT) - ), - $queryBuilder->expr()->eq('expires', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)) ) ) - ->setMaxResults(1) - ->execute() - ->fetch(); + ->setMaxResults(1); + + $cacheEntry = $query->execute()->fetch(); + $cacheEntryExists = is_array($cacheEntry); + $cacheEntryIsExpired = $cacheEntry['expires'] <= $GLOBALS['EXEC_TIME']; - if (is_array($cacheEntry)) { - // Cache hit - return $cacheEntry['treelist']; + if ($cacheEntryExists) { + if (!$cacheEntryIsExpired) { + // Cache hit + return $cacheEntry['treelist']; + } + $cacheTreeListConnection->delete( + 'cache_treelist', + [ + 'md5hash' => $requestHash + ] + ); } // If Id less than zero it means we should add the real id to list: if ($id < 0) {