diff options
author | Vincent Petry <vincent@nextcloud.com> | 2022-06-10 11:38:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-10 11:38:01 +0200 |
commit | f68ff54960947dd9c5b04e1f6e9fc222b961ba70 (patch) | |
tree | 1df73e553bde88ae748e4d2a4eda198428cbe3b5 /lib/private | |
parent | dd809633d989bb6747bd1f34d4202f6974a15ac6 (diff) | |
parent | a200afac68d48440bc27de2793cfd7e946224ebe (diff) | |
download | nextcloud-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.php | 13 |
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; })); |