mirror of
https://github.com/linuxserver/Heimdall.git
synced 2026-08-07 07:16:13 +00:00
f69cbba6cd
Bumps the packages reported by CVE/GHSA scans in #1564 to their patched releases (with transitive dependencies): - symfony/http-foundation 7.3.1 -> 7.4.14 (CVE-2025-64500 / GHSA-3rg7-wf37-54rm) - phpunit/phpunit 10.5.47 -> 10.5.64 (CVE-2026-24765 / GHSA-vvj3-c3rp-c85p) - aws/aws-sdk-php 3.349.3 -> 3.388.0 (GHSA-27qh-8cxx-2cr5) - enshrined/svg-sanitize 0.21.0 -> 0.22.0 (GHSA-22wq-q86m-83fh) Some transitive dependencies now require PHP 8.4, which matches the runtime shipped in the official LinuxServer image, so the composer requirement is raised to ^8.4, CI is pinned to PHP 8.4, and the readme is updated to match. The remaining advisories in the report (php84, curl, libpq, git, sqlite, busybox, coreutils) come from the LinuxServer base image, not this repository, and are addressed by rebuilding the image on an updated base. Refs #1564
113 lines
2.8 KiB
PHP
113 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace Aws\Api\Parser;
|
|
|
|
use GuzzleHttp\Psr7;
|
|
use Psr\Http\Message\StreamInterface;
|
|
use Aws\Api\Parser\Exception\ParserException;
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
class NonSeekableStreamDecodingEventStreamIterator extends DecodingEventStreamIterator
|
|
{
|
|
/** @var array $tempBuffer */
|
|
private $tempBuffer;
|
|
|
|
/**
|
|
* NonSeekableStreamDecodingEventStreamIterator constructor.
|
|
*
|
|
* @param StreamInterface $stream
|
|
*/
|
|
public function __construct(StreamInterface $stream)
|
|
{
|
|
$this->stream = $stream;
|
|
if ($this->stream->isSeekable()) {
|
|
throw new \InvalidArgumentException('The stream provided must be not seekable.');
|
|
}
|
|
|
|
$this->tempBuffer = [];
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function parseEvent(): array
|
|
{
|
|
$event = [];
|
|
$this->hashContext = hash_init('crc32b');
|
|
$prelude = $this->parsePrelude()[0];
|
|
list(
|
|
$event[self::HEADERS],
|
|
$numBytes
|
|
) = $this->parseHeaders($prelude[self::LENGTH_HEADERS]);
|
|
$event[self::PAYLOAD] = Psr7\Utils::streamFor(
|
|
$this->readAndHashBytes(
|
|
$prelude[self::LENGTH_TOTAL] - self::BYTES_PRELUDE
|
|
- $numBytes - self::BYTES_TRAILING
|
|
)
|
|
);
|
|
$calculatedCrc = hash_final($this->hashContext, true);
|
|
$messageCrc = $this->stream->read(4);
|
|
if ($calculatedCrc !== $messageCrc) {
|
|
throw new ParserException('Message checksum mismatch.');
|
|
}
|
|
|
|
return $event;
|
|
}
|
|
|
|
protected function readAndHashBytes($num): string
|
|
{
|
|
$bytes = '';
|
|
while (!empty($this->tempBuffer) && $num > 0) {
|
|
$byte = array_shift($this->tempBuffer);
|
|
$bytes .= $byte;
|
|
$num -= 1;
|
|
}
|
|
|
|
// Loop until we've read the expected number of bytes
|
|
while ($num > 0 && !$this->stream->eof()) {
|
|
$chunk = $this->stream->read($num);
|
|
$chunkLen = strlen($chunk);
|
|
$bytes .= $chunk;
|
|
$num -= $chunkLen;
|
|
|
|
if ($chunkLen === 0) {
|
|
break; // Prevent infinite loop on unexpected EOF
|
|
}
|
|
}
|
|
|
|
hash_update($this->hashContext, $bytes);
|
|
|
|
return $bytes;
|
|
}
|
|
|
|
// Iterator Functionality
|
|
|
|
#[\ReturnTypeWillChange]
|
|
public function rewind()
|
|
{
|
|
$this->currentEvent = $this->parseEvent();
|
|
}
|
|
|
|
public function next()
|
|
{
|
|
$this->tempBuffer[] = $this->stream->read(1);
|
|
if ($this->valid()) {
|
|
$this->key++;
|
|
$this->currentEvent = $this->parseEvent();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
#[\ReturnTypeWillChange]
|
|
public function valid()
|
|
{
|
|
return !$this->stream->eof();
|
|
}
|
|
}
|