From b018ecbe9ec24cd1a9c8a4cad665267dc1f9753c Mon Sep 17 00:00:00 2001 From: Michael Grosse <grosse@cosmocode.de> Date: Mon, 18 Apr 2016 20:01:10 +0200 Subject: [PATCH] Fix caching issue in wikiFN The function wikiFN effectively takes the $clean flag now into account when caching filepaths and when returning them from cache. Fixes #1536 --- _test/tests/inc/pageutils_wikiFN.test.php | 17 +++++++++++++++++ inc/pageutils.php | 13 +++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 _test/tests/inc/pageutils_wikiFN.test.php diff --git a/_test/tests/inc/pageutils_wikiFN.test.php b/_test/tests/inc/pageutils_wikiFN.test.php new file mode 100644 index 000000000..6d9b73e22 --- /dev/null +++ b/_test/tests/inc/pageutils_wikiFN.test.php @@ -0,0 +1,17 @@ +<?php + +class wikifn_test extends DokuWikiTest { + + + function test_cache_cleaning_cleanToUnclean(){ + $this->assertEquals(wikiFN('wiki:',null,false),DOKU_TMP_DATA.'pages/wiki/.txt'); + $this->assertEquals(wikiFN('wiki:',null,true),DOKU_TMP_DATA.'pages/wiki.txt'); + } + + function test_cache_cleaning_uncleanToClean(){ + $this->assertEquals(wikiFN('wiki:',null,true),DOKU_TMP_DATA.'pages/wiki.txt'); + $this->assertEquals(wikiFN('wiki:',null,false),DOKU_TMP_DATA.'pages/wiki/.txt'); + } + +} +//Setup VIM: ex: et ts=4 : diff --git a/inc/pageutils.php b/inc/pageutils.php index a101e0aec..6498fca40 100644 --- a/inc/pageutils.php +++ b/inc/pageutils.php @@ -285,14 +285,15 @@ function wikiFN($raw_id,$rev='',$clean=true){ global $cache_wikifn; $cache = & $cache_wikifn; - if (isset($cache[$raw_id]) && isset($cache[$raw_id][$rev])) { - return $cache[$raw_id][$rev]; - } - $id = $raw_id; if ($clean) $id = cleanID($id); $id = str_replace(':','/',$id); + + if (isset($cache[$id]) && isset($cache[$id][$rev])) { + return $cache[$id][$rev]; + } + if(empty($rev)){ $fn = $conf['datadir'].'/'.utf8_encodeFN($id).'.txt'; }else{ @@ -310,8 +311,8 @@ function wikiFN($raw_id,$rev='',$clean=true){ } } - if (!isset($cache[$raw_id])) { $cache[$raw_id] = array(); } - $cache[$raw_id][$rev] = $fn; + if (!isset($cache[$id])) { $cache[$id] = array(); } + $cache[$id][$rev] = $fn; return $fn; } -- GitLab