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-05-19 16:06:41 +0000
commitbe6cd84f1d7db4a3919f6890460caa5ef678e565 (patch)
treeca2ab45df1e391843c5e42c4e0de48beb1d3262f
parentef3b98d1f294b1cb96293ed8a82a6ebdb0aa8226 (diff)
downloadnextcloud-server-backport/52963/stable30.tar.gz
nextcloud-server-backport/52963/stable30.zip
fix(files_versions): Log error instead of crashing when event listeners get called on non-existing filesbackport/52963/stable30
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 c581c61b4ae..633277cb458 100644
--- a/apps/files_versions/lib/Listener/FileEventsListener.php
+++ b/apps/files_versions/lib/Listener/FileEventsListener.php
@@ -124,6 +124,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) {
@@ -151,7 +167,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);
}
}
@@ -189,6 +220,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) {