]> BookStack Code Mirror - bookstack/blobdiff - app/Http/RangeSupportedStream.php
System CLI: Updated to 126de5599c state
[bookstack] / app / Http / RangeSupportedStream.php
index b51d4a5498fc42428aa41ba2d656cb728c86e473..300f4488cf44453d4f18f5c27207da8b6f12ed1b 100644 (file)
@@ -13,8 +13,8 @@ use Illuminate\Http\Request;
  */
 class RangeSupportedStream
 {
-    protected string $sniffContent;
-    protected array $responseHeaders;
+    protected string $sniffContent = '';
+    protected array $responseHeaders = [];
     protected int $responseStatus = 200;
 
     protected int $responseLength = 0;
@@ -53,16 +53,20 @@ class RangeSupportedStream
         }
 
         $outStream = fopen('php://output', 'w');
-        $sniffOffset = strlen($this->sniffContent);
+        $sniffLength = strlen($this->sniffContent);
+        $bytesToWrite = $this->responseLength;
 
-        if (!empty($this->sniffContent) && $this->responseOffset < $sniffOffset) {
-            $sniffOutput = substr($this->sniffContent, $this->responseOffset, min($sniffOffset, $this->responseLength));
+        if ($sniffLength > 0 && $this->responseOffset < $sniffLength) {
+            $sniffEnd = min($sniffLength, $bytesToWrite + $this->responseOffset);
+            $sniffOutLength = $sniffEnd - $this->responseOffset;
+            $sniffOutput = substr($this->sniffContent, $this->responseOffset, $sniffOutLength);
             fwrite($outStream, $sniffOutput);
+            $bytesToWrite -= $sniffOutLength;
         } else if ($this->responseOffset !== 0) {
             fseek($this->stream, $this->responseOffset);
         }
 
-        stream_copy_to_stream($this->stream, $outStream, $this->responseLength);
+        stream_copy_to_stream($this->stream, $outStream, $bytesToWrite);
 
         fclose($this->stream);
         fclose($outStream);
@@ -124,10 +128,6 @@ class RangeSupportedStream
             $start = (int) $start;
         }
 
-        if ($start > $end) {
-            return null;
-        }
-
         $end = min($end, $this->fileSize - 1);
         return [$start, $end];
     }