From: Joas Schilling Date: Thu, 24 Sep 2020 12:58:44 +0000 (+0200) Subject: Fix numeric folders throwing on markDirty X-Git-Tag: v20.0.0~16^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=refs%2Fpull%2F23048%2Fhead;p=nextcloud-server.git Fix numeric folders throwing on markDirty TypeError: strpos() expects parameter 1 to be string, int given The problem is that in cacheNode() we strip of any slashes, so a folder "0/" will be trimmed to "0" and be used as an array key. Since PHP automatically casts numeric array keys to integers, you afterwards get $nodePath as int(0). Since it's now a number, the strpos() function does not accept it anymore. Simply casting $nodePath to a string again in the foreach solves the issue Signed-off-by: Joas Schilling --- diff --git a/apps/dav/lib/Connector/Sabre/CachingTree.php b/apps/dav/lib/Connector/Sabre/CachingTree.php index 2d68025e3fa..e65b0d3b4d1 100644 --- a/apps/dav/lib/Connector/Sabre/CachingTree.php +++ b/apps/dav/lib/Connector/Sabre/CachingTree.php @@ -38,4 +38,16 @@ class CachingTree extends Tree { } $this->cache[trim($path, '/')] = $node; } + + public function markDirty($path) { + // We don't care enough about sub-paths + // flushing the entire cache + $path = trim($path, '/'); + foreach ($this->cache as $nodePath => $node) { + $nodePath = (string) $nodePath; + if ('' === $path || $nodePath == $path || 0 === strpos($nodePath, $path.'/')) { + unset($this->cache[$nodePath]); + } + } + } }