Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2017-11-02 16:56:51 +0300
committerGitHub <noreply@github.com>2017-11-02 16:56:51 +0300
commit687c92bfd3a51cea9024236dc7357bdf81534502 (patch)
tree7f34c3636f9e78a13b2ce3353ce157bd6b623850 /lib
parent4a3893b105b5b701e2146b5f27eacdce7f436200 (diff)
parentde912385e00eae5c32445ae934c1c111f90961b2 (diff)
Merge pull request #6974 from nextcloud/fix-fseek-on-objectstorage
Fix seeking on object storage
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Files/View.php24
1 files changed, 22 insertions, 2 deletions
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 7fee0883a25..d69f3b45fd2 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -447,8 +447,28 @@ class View {
@ob_end_clean();
$handle = $this->fopen($path, 'rb');
if ($handle) {
- if (fseek($handle, $from) === 0) {
- $chunkSize = 8192; // 8 kB chunks
+ $chunkSize = 8192; // 8 kB chunks
+ $startReading = true;
+
+ if ($from !== 0 && $from !== '0' && fseek($handle, $from) !== 0) {
+ // forward file handle via chunked fread because fseek seem to have failed
+
+ $end = $from + 1;
+ while (!feof($handle) && ftell($handle) < $end) {
+ $len = $from - ftell($handle);
+ if ($len > $chunkSize) {
+ $len = $chunkSize;
+ }
+ $result = fread($handle, $len);
+
+ if ($result === false) {
+ $startReading = false;
+ break;
+ }
+ }
+ }
+
+ if ($startReading) {
$end = $to + 1;
while (!feof($handle) && ftell($handle) < $end) {
$len = $end - ftell($handle);