Merge pull request #52963 from nextcloud/fix/avoid-crashing-versions-listener-on-non-existing-file

fix(files_versions): Log error instead of crashing when event listeners get called on non-existing files
pull/53800/head
Arthur Schiwon 2025-07-03 15:21:25 +07:00 committed by GitHub
commit 38a8546bd6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 43 additions and 1 deletions

@ -126,6 +126,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) {
@ -153,7 +169,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);
}
}
@ -191,6 +222,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) {