summaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorVincent Petry <vincent@nextcloud.com>2022-06-10 11:38:01 +0200
committerGitHub <noreply@github.com>2022-06-10 11:38:01 +0200
commitf68ff54960947dd9c5b04e1f6e9fc222b961ba70 (patch)
tree1df73e553bde88ae748e4d2a4eda198428cbe3b5 /lib/private
parentdd809633d989bb6747bd1f34d4202f6974a15ac6 (diff)
parenta200afac68d48440bc27de2793cfd7e946224ebe (diff)
downloadnextcloud-server-f68ff54960947dd9c5b04e1f6e9fc222b961ba70.tar.gz
nextcloud-server-f68ff54960947dd9c5b04e1f6e9fc222b961ba70.zip
Merge pull request #32777 from nextcloud/backport/32767/stable23
[stable23] handle stream wrappers in SeekableHttpStream
Diffstat (limited to 'lib/private')
-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;
}));