diff options
| author | EoleDev <root@serverpc.home> | 2016-03-09 16:17:33 +0100 |
|---|---|---|
| committer | EoleDev <root@serverpc.home> | 2016-03-09 16:17:33 +0100 |
| commit | 2b8decb81faeb7928bcbfda84c6f33a003f707fd (patch) | |
| tree | 0e491d7ae2bf91347b1cf50d2c475625d8f659b4 /server/vendor/guzzlehttp/psr7/src/InflateStream.php | |
| parent | b7ebe1272c1127df290535af2430622b28160bb0 (diff) | |
| parent | 03ef74d0cfe675a6e18a91f039182ca1b248d8f5 (diff) | |
Maj Library
Diffstat (limited to 'server/vendor/guzzlehttp/psr7/src/InflateStream.php')
| -rw-r--r-- | server/vendor/guzzlehttp/psr7/src/InflateStream.php | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/server/vendor/guzzlehttp/psr7/src/InflateStream.php b/server/vendor/guzzlehttp/psr7/src/InflateStream.php index 2c8628b..0051d3f 100644 --- a/server/vendor/guzzlehttp/psr7/src/InflateStream.php +++ b/server/vendor/guzzlehttp/psr7/src/InflateStream.php @@ -20,10 +20,33 @@ class InflateStream implements StreamInterface public function __construct(StreamInterface $stream) { - // Skip the first 10 bytes - $stream = new LimitStream($stream, -1, 10); + // read the first 10 bytes, ie. gzip header + $header = $stream->read(10); + $filenameHeaderLength = $this->getLengthOfPossibleFilenameHeader($stream, $header); + // Skip the header, that is 10 + length of filename + 1 (nil) bytes + $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength); $resource = StreamWrapper::getResource($stream); stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ); $this->stream = new Stream($resource); } + + /** + * @param StreamInterface $stream + * @param $header + * @return int + */ + private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header) + { + $filename_header_length = 0; + + if (substr(bin2hex($header), 6, 2) === '08') { + // we have a filename, read until nil + $filename_header_length = 1; + while ($stream->read(1) !== chr(0)) { + $filename_header_length++; + } + } + + return $filename_header_length; + } } |
