diff options
author | Ferdinand Thiessen <opensource@fthiessen.de> | 2025-02-18 16:41:10 +0100 |
---|---|---|
committer | backportbot[bot] <backportbot[bot]@users.noreply.github.com> | 2025-02-28 09:37:04 +0000 |
commit | 93995c337349cb5fe8b2cdeb2cf59f6c07b3a723 (patch) | |
tree | f6efde0fb0d9d05442623d8ff4ec1a80faf8c159 | |
parent | bc807f7d35de10fd9e7bed5174fcb1b0a47fa423 (diff) | |
download | nextcloud-server-backport/50881/stable30.tar.gz nextcloud-server-backport/50881/stable30.zip |
fix(dav): Handle end of stream in `File::put`backport/50881/stable30
If the stream is aborted and the callback wrapper returns false (or
null as it happened in some cases), we should not try to write to the
storage but abort the operation.
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
-rw-r--r-- | apps/dav/lib/Connector/Sabre/File.php | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php index 0b9199492fe..fe29a9f513d 100644 --- a/apps/dav/lib/Connector/Sabre/File.php +++ b/apps/dav/lib/Connector/Sabre/File.php @@ -13,7 +13,6 @@ use OC\Files\Filesystem; use OC\Files\Stream\HashWrapper; use OC\Files\View; use OCA\DAV\AppInfo\Application; -use OCA\DAV\Connector\Sabre\Exception\BadGateway; use OCA\DAV\Connector\Sabre\Exception\EntityTooLarge; use OCA\DAV\Connector\Sabre\Exception\FileLocked; use OCA\DAV\Connector\Sabre\Exception\Forbidden as DAVForbiddenException; @@ -202,21 +201,17 @@ class File extends Node implements IFile { $isEOF = feof($stream); }); - $result = true; - $count = -1; - try { - $count = $partStorage->writeStream($internalPartPath, $wrappedData); - } catch (GenericFileException $e) { - $result = false; - } catch (BadGateway $e) { - throw $e; - } - - - if ($result === false) { - $result = $isEOF; - if (is_resource($wrappedData)) { - $result = feof($wrappedData); + $result = is_resource($wrappedData); + if ($result) { + $count = -1; + try { + /** @var IWriteStreamStorage $partStorage */ + $count = $partStorage->writeStream($internalPartPath, $wrappedData); + } catch (GenericFileException) { + $result = $isEOF; + if (is_resource($wrappedData)) { + $result = feof($wrappedData); + } } } } else { |