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