Bug #19501
closed
same key wrongly used in substituteMarkerArrayCached
Added by Franz Holzinger almost 16 years ago.
Updated over 4 years ago.
Description
If you call substituteMarkerArrayCached twice with the same template part, and once you want to use
some text
First you set the $wrappedSubpartContentArray['###MYSUBPART###']='', $subpartContentArray=array(); where the other array keys remain the same.
Secondly you do the same call, however $wrappedSubpartContentArray=array() and
$subpartContentArray['###MYSUBPART###']=''
The second call will never do what you want, it gives you 'some text' instead of an empty string. This is because the function substituteMarkerArrayCached calculates the same cache although it has formerly been called with the same key set in $wrappedSubpartContentArray and not in $subpartContentArray
Solution:The keys of all arrays must not be merged to generate the md5 sum. It must be considered somewhere from which array a key comes from.
(issue imported from #M9631)
- Status changed from New to Needs Feedback
- Target version deleted (
0)
The issue is very old, does this issue exists in newer versions of TYPO3 CMS (4.5 or 6.1)?
The code of the method substituteMarkerArrayCached has been moved into
file ContentObjectRenderer.php.
The code looks unchanged. The problem remains the same.
// Finding keys and check hash:
$sPkeys = array_keys($subpartContentArray);
$wPkeys = array_keys($wrappedSubpartContentArray);
$aKeys = array_merge(array_keys($markContentArray), $sPkeys, $wPkeys);
- Status changed from Needs Feedback to New
- Status changed from New to Needs Feedback
- Is Regression set to No
Since you dug so deep into the code, would you see the possibility to come up with a patch for this?
I dont have a patch at the moment, but i am using the rn_base extension since some years. There are the same function with some changes, which fixed this issue.
Have a look at https://github.com/rengaw83/rn_base/blob/master/util/class.tx_rnbase_util_Templates.php#L295
The reason is, how the md5 store key was created.
This should not created with a merge of the marker array keys.
The store key has to be created with all marker array keys itself.
old:
$storeKey = md5('substituteMarkerArrayCached_storeKey:'.serialize(array($content, $aKeys)));
new can be:
$storeKey = md5('substituteMarkerArrayCached_storeKey:'.serialize(array($content, $sPkeys, $wPkeys, array_keys($markContentArray))));
I hope it helps a little bit.
- Status changed from Needs Feedback to New
- Status changed from New to Needs Feedback
This issue is very old. Is the bug still present in master and/or 7LTS?
- Category set to Content Rendering
- Status changed from Needs Feedback to Accepted
Behavior confirmed in master (CMS 8)
- Status changed from Accepted to Under Review
- Status changed from Under Review to New
- Category changed from Content Rendering to Frontend
- Status changed from New to Closed
Meanwhile, the method has been deprecated and removed.
Also available in: Atom
PDF