aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnna Larch <anna@nextcloud.com>2024-12-12 15:53:11 +0100
committerAnna Larch <anna@nextcloud.com>2024-12-17 14:54:44 +0100
commita39a5c672a7c78b5f77213235cdee727f2b26ce6 (patch)
tree313859111568f31ab165c4cd9959188dbc99aac5
parent4f74901edabe14c400931db6f431ca6ee5ceb24b (diff)
downloadnextcloud-server-fix/noid/empty-path-for-files-versions.tar.gz
nextcloud-server-fix/noid/empty-path-for-files-versions.zip
Signed-off-by: Anna Larch <anna@nextcloud.com>
-rw-r--r--apps/files_versions/lib/Listener/FileEventsListener.php29
1 files changed, 18 insertions, 11 deletions
diff --git a/apps/files_versions/lib/Listener/FileEventsListener.php b/apps/files_versions/lib/Listener/FileEventsListener.php
index 3273f1f9c40..145c572160f 100644
--- a/apps/files_versions/lib/Listener/FileEventsListener.php
+++ b/apps/files_versions/lib/Listener/FileEventsListener.php
@@ -384,16 +384,7 @@ class FileEventsListener implements IEventListener {
$owner = $node->getOwner()?->getUid();
- // If no owner, extract it from the path.
- // e.g. /user/files/foobar.txt
- if (!$owner) {
- $parts = explode('/', $node->getPath(), 4);
- if (count($parts) === 4) {
- $owner = $parts[1];
- }
- }
-
- if ($owner) {
+ if ($owner !== null) {
$path = $this->rootFolder
->getUserFolder($owner)
->getRelativePath($node->getPath());
@@ -403,6 +394,22 @@ class FileEventsListener implements IEventListener {
}
}
- return null;
+ // If no owner, or didn't find a path for the owner,
+ // extract the owner name from the path and try again
+ // Happens when a file version is owned by a different user than the owner of
+ // the original file
+ // @see https://github.com/nextcloud/server/issues/40090
+ $parts = explode('/', $node->getPath(), 4);
+ if (count($parts) === 4) {
+ $owner = $parts[1];
+ }
+
+ if ($owner === '' || $owner === null) {
+ return null;
+ }
+
+ return $this->rootFolder
+ ->getUserFolder($owner)
+ ->getRelativePath($node->getPath());
}
}