aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel <mail@danielkesselberg.de>2021-10-08 10:02:01 +0200
committerGitHub <noreply@github.com>2021-10-08 10:02:01 +0200
commit9187e986e10a0e189f825cd462eb9e68bd732981 (patch)
tree0eb9b5b9b534bf82b7db49da6caea8f03e9bb0b6
parent8d2caa03baad7cce15da42ac58642bca9cbe9449 (diff)
parentbe3f4edf1f38b1ebfd91366334e5a3a91c63cffe (diff)
downloadnextcloud-server-9187e986e10a0e189f825cd462eb9e68bd732981.tar.gz
nextcloud-server-9187e986e10a0e189f825cd462eb9e68bd732981.zip
Merge pull request #28907 from nextcloud/bug/noid/close-stream-local
explicitly close source stream on local / encryption storage
-rw-r--r--lib/private/Files/Storage/Local.php5
-rw-r--r--lib/private/Files/Storage/Wrapper/Encryption.php5
-rw-r--r--tests/lib/Files/Storage/Storage.php3
3 files changed, 9 insertions, 4 deletions
diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php
index ccd331f515f..eea04bd8676 100644
--- a/lib/private/Files/Storage/Local.php
+++ b/lib/private/Files/Storage/Local.php
@@ -568,8 +568,11 @@ class Local extends \OC\Files\Storage\Common {
public function writeStream(string $path, $stream, int $size = null): int {
$result = $this->file_put_contents($path, $stream);
+ if (is_resource($stream)) {
+ fclose($stream);
+ }
if ($result === false) {
- throw new GenericFileException("Failed write steam to $path");
+ throw new GenericFileException("Failed write stream to $path");
} else {
return $result;
}
diff --git a/lib/private/Files/Storage/Wrapper/Encryption.php b/lib/private/Files/Storage/Wrapper/Encryption.php
index 3c65cdbc8f6..e44b7afe6fd 100644
--- a/lib/private/Files/Storage/Wrapper/Encryption.php
+++ b/lib/private/Files/Storage/Wrapper/Encryption.php
@@ -926,10 +926,10 @@ class Encryption extends Wrapper {
}
$result = [];
-
+
// first check if it is an encrypted file at all
// We would do query to filecache only if we know that entry in filecache exists
-
+
$info = $this->getCache()->get($path);
if (isset($info['encrypted']) && $info['encrypted'] === true) {
$firstBlock = $this->readFirstBlock($path);
@@ -1033,6 +1033,7 @@ class Encryption extends Wrapper {
// always fall back to fopen
$target = $this->fopen($path, 'w');
[$count, $result] = \OC_Helper::streamCopy($stream, $target);
+ fclose($stream);
fclose($target);
return $count;
}
diff --git a/tests/lib/Files/Storage/Storage.php b/tests/lib/Files/Storage/Storage.php
index ecc2bb50538..9fae1a8484a 100644
--- a/tests/lib/Files/Storage/Storage.php
+++ b/tests/lib/Files/Storage/Storage.php
@@ -658,6 +658,7 @@ abstract class Storage extends \Test\TestCase {
$storage->writeStream('test.txt', $source);
$this->assertTrue($storage->file_exists('test.txt'));
- $this->assertEquals(file_get_contents($textFile), $storage->file_get_contents('test.txt'));
+ $this->assertStringEqualsFile($textFile, $storage->file_get_contents('test.txt'));
+ $this->assertEquals('resource (closed)', gettype($source));
}
}