[Pkg-owncloud-commits] [owncloud] 59/95: Properly detect streamCopy errors
David Prévot
taffit at moszumanska.debian.org
Wed Mar 11 15:49:49 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to annotated tag v8.0.1
in repository owncloud.
commit c6c888c8a1ba840a012648882cc1111979af9da4
Author: Vincent Petry <pvince81 at owncloud.com>
Date: Mon Feb 23 12:31:22 2015 +0100
Properly detect streamCopy errors
Now checking whether the written bytes match the number of read bytes.
---
lib/private/helper.php | 16 +++++++++++++---
tests/lib/files/storage/wrapper/quota.php | 22 ++++++++++++++++++++++
2 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/lib/private/helper.php b/lib/private/helper.php
index 6268bd3..a86725e 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -578,13 +578,23 @@ class OC_Helper {
if (!$source or !$target) {
return array(0, false);
}
+ $bufSize = 8192;
$result = true;
$count = 0;
while (!feof($source)) {
- if (($c = fwrite($target, fread($source, 8192))) === false) {
+ $buf = fread($source, $bufSize);
+ $bytesWritten = fwrite($target, $buf);
+ if ($bytesWritten !== false) {
+ $count += $bytesWritten;
+ }
+ // note: strlen is expensive so only use it when necessary,
+ // on the last block
+ if ($bytesWritten === false
+ || ($bytesWritten < $bufSize && $bytesWritten < strlen($buf))
+ ) {
+ // write error, could be disk full ?
$result = false;
- } else {
- $count += $c;
+ break;
}
}
return array($count, $result);
diff --git a/tests/lib/files/storage/wrapper/quota.php b/tests/lib/files/storage/wrapper/quota.php
index dc4de46..8ca8f30 100644
--- a/tests/lib/files/storage/wrapper/quota.php
+++ b/tests/lib/files/storage/wrapper/quota.php
@@ -99,6 +99,28 @@ class Quota extends \Test\Files\Storage\Storage {
$this->assertEquals('foobarqwe', $instance->file_get_contents('foo'));
}
+ public function testStreamCopyWithEnoughSpace() {
+ $instance = $this->getLimitedStorage(16);
+ $inputStream = fopen('data://text/plain,foobarqwerty', 'r');
+ $outputStream = $instance->fopen('foo', 'w+');
+ list($count, $result) = \OC_Helper::streamCopy($inputStream, $outputStream);
+ $this->assertEquals(12, $count);
+ $this->assertTrue($result);
+ fclose($inputStream);
+ fclose($outputStream);
+ }
+
+ public function testStreamCopyNotEnoughSpace() {
+ $instance = $this->getLimitedStorage(9);
+ $inputStream = fopen('data://text/plain,foobarqwerty', 'r');
+ $outputStream = $instance->fopen('foo', 'w+');
+ list($count, $result) = \OC_Helper::streamCopy($inputStream, $outputStream);
+ $this->assertEquals(9, $count);
+ $this->assertFalse($result);
+ fclose($inputStream);
+ fclose($outputStream);
+ }
+
public function testReturnFalseWhenFopenFailed() {
$failStorage = $this->getMock(
'\OC\Files\Storage\Local',
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git
More information about the Pkg-owncloud-commits
mailing list