aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2025-05-19 17:33:17 +0200
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2025-07-03 13:21:32 +0000
commit93f064d97433b138f1af5ed322e68bc411d80264 (patch)
tree271094bf563b7438623980a6db1186930a174f23
parent32d4f84b38550aed54c4014fd14a3469cdc275b7 (diff)
downloadnextcloud-server-backport/52963/stable31.tar.gz
nextcloud-server-backport/52963/stable31.zip
fix(files_versions): Log error instead of crashing when event listeners get called on non-existing filesbackport/52963/stable31
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
-rw-r--r--apps/files_versions/lib/Listener/FileEventsListener.php44
1 files changed, 43 insertions, 1 deletions
diff --git a/apps/files_versions/lib/Listener/FileEventsListener.php b/apps/files_versions/lib/Listener/FileEventsListener.php
index fd777067537..d5c60dd9343 100644
--- a/apps/files_versions/lib/Listener/FileEventsListener.php
+++ b/apps/files_versions/lib/Listener/FileEventsListener.php
@@ -125,6 +125,22 @@ class FileEventsListener implements IEventListener {
}
public function touch_hook(Node $node): void {
+ // Do not handle folders.
+ if ($node instanceof Folder) {
+ return;
+ }
+
+ if ($node instanceof NonExistingFile) {
+ $this->logger->error(
+ 'Failed to create or update version for {path}, node does not exist',
+ [
+ 'path' => $node->getPath(),
+ ]
+ );
+
+ return;
+ }
+
$previousNode = $this->nodesTouched[$node->getId()] ?? null;
if ($previousNode === null) {
@@ -152,7 +168,22 @@ class FileEventsListener implements IEventListener {
public function created(Node $node): void {
// Do not handle folders.
- if ($node instanceof File && $this->versionManager instanceof INeedSyncVersionBackend) {
+ if (!($node instanceof File)) {
+ return;
+ }
+
+ if ($node instanceof NonExistingFile) {
+ $this->logger->error(
+ 'Failed to create version for {path}, node does not exist',
+ [
+ 'path' => $node->getPath(),
+ ]
+ );
+
+ return;
+ }
+
+ if ($this->versionManager instanceof INeedSyncVersionBackend) {
$this->versionManager->createVersionEntity($node);
}
}
@@ -190,6 +221,17 @@ class FileEventsListener implements IEventListener {
return;
}
+ if ($node instanceof NonExistingFile) {
+ $this->logger->error(
+ 'Failed to create or update version for {path}, node does not exist',
+ [
+ 'path' => $node->getPath(),
+ ]
+ );
+
+ return;
+ }
+
$writeHookInfo = $this->writeHookInfo[$node->getId()] ?? null;
if ($writeHookInfo === null) {