aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Files/Stream
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2022-06-08 17:52:27 +0200
committerRobin Appelman <robin@icewind.nl>2022-06-08 17:52:27 +0200
commit499995b37a6a761cead629a64dd216eeac794619 (patch)
treeb55d3a4c2509b61f62db84d671c99efcc7774240 /lib/private/Files/Stream
parent6d5d91f6f93acbbd9886714ca59ebcc31578bd31 (diff)
downloadnextcloud-server-499995b37a6a761cead629a64dd216eeac794619.tar.gz
nextcloud-server-499995b37a6a761cead629a64dd216eeac794619.zip
handle stream wrappers in SeekableHttpStream
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib/private/Files/Stream')
-rw-r--r--lib/private/Files/Stream/SeekableHttpStream.php13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/private/Files/Stream/SeekableHttpStream.php b/lib/private/Files/Stream/SeekableHttpStream.php
index af797c7720d..820a681bd07 100644
--- a/lib/private/Files/Stream/SeekableHttpStream.php
+++ b/lib/private/Files/Stream/SeekableHttpStream.php
@@ -24,6 +24,7 @@
namespace OC\Files\Stream;
use Icewind\Streams\File;
+use Icewind\Streams\Wrapper;
/**
* A stream wrapper that uses http range requests to provide a seekable stream for http reading
@@ -92,6 +93,18 @@ class SeekableHttpStream implements File {
}
$responseHead = stream_get_meta_data($this->current)['wrapper_data'];
+
+ while ($responseHead instanceof Wrapper) {
+ $wrapperOptions = stream_context_get_options($responseHead->context);
+ foreach ($wrapperOptions as $options) {
+ if (isset($options['source']) && is_resource($options['source'])) {
+ $responseHead = stream_get_meta_data($options['source'])['wrapper_data'];
+ continue 2;
+ }
+ }
+ throw new \Exception("Failed to get source stream from stream wrapper of " . get_class($responseHead));
+ }
+
$rangeHeaders = array_values(array_filter($responseHead, function ($v) {
return preg_match('#^content-range:#i', $v) === 1;
}));