summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2020-09-24 14:58:44 +0200
committerJoas Schilling <coding@schilljs.com>2020-09-24 15:02:30 +0200
commit6db5f53bc6be489ddea35a8da53280136699bbe1 (patch)
treed4e524eea08226c9dafaba21b4581079d95c1718 /apps/dav/lib
parent0e2f316ece9a0f5ec5db271f3a5c50a767c76030 (diff)
downloadnextcloud-server-6db5f53bc6be489ddea35a8da53280136699bbe1.tar.gz
nextcloud-server-6db5f53bc6be489ddea35a8da53280136699bbe1.zip
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 <coding@schilljs.com>
Diffstat (limited to 'apps/dav/lib')
-rw-r--r--apps/dav/lib/Connector/Sabre/CachingTree.php12
1 files changed, 12 insertions, 0 deletions
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]);
+ }
+ }
+ }
}