Always rewind input streams if possible.

This commit is contained in:
flash 2025-03-25 14:17:15 +00:00
parent 2372a113d2
commit 0f3501acc6
Signed by: flash
GPG key ID: 2C9C2C574D47FE3E
4 changed files with 17 additions and 16 deletions

View file

@ -1 +1 @@
0.2503.230355 0.2503.251417

View file

@ -1,7 +1,7 @@
<?php <?php
// MultipartFormContent.php // MultipartFormContent.php
// Created: 2025-03-12 // Created: 2025-03-12
// Updated: 2025-03-23 // Updated: 2025-03-25
namespace Index\Http\Content; namespace Index\Http\Content;
@ -88,7 +88,7 @@ class MultipartFormContent implements FormContent, Iterator {
/** /**
* Parses multipart form data in a stream. * Parses multipart form data in a stream.
* *
* @param StreamInterface $stream Stream to parse, if seekable gets rewound. * @param StreamInterface $stream Stream to parse.
* @param string $boundary Boundary string. * @param string $boundary Boundary string.
* @throws RuntimeException if the form could not be parsed correctly * @throws RuntimeException if the form could not be parsed correctly
* @return MultipartFormContent * @return MultipartFormContent
@ -221,9 +221,6 @@ class MultipartFormContent implements FormContent, Iterator {
$params[$part->name] = [$part]; $params[$part->name] = [$part];
} }
if($stream->isSeekable())
$stream->rewind();
return new MultipartFormContent($stream, $params, $files); return new MultipartFormContent($stream, $params, $files);
} }
} }

View file

@ -1,7 +1,7 @@
<?php <?php
// UrlEncodedFormContent.php // UrlEncodedFormContent.php
// Created: 2025-03-12 // Created: 2025-03-12
// Updated: 2025-03-20 // Updated: 2025-03-25
namespace Index\Http\Content; namespace Index\Http\Content;
@ -58,14 +58,10 @@ class UrlEncodedFormContent implements FormContent {
/** /**
* Parses URL encoded form params in a stream. * Parses URL encoded form params in a stream.
* *
* @param StreamInterface $stream Stream to parse, if seekable gets rewound. * @param StreamInterface $stream Stream to parse.
* @return UrlEncodedFormContent * @return UrlEncodedFormContent
*/ */
public static function parseStream(StreamInterface $stream): UrlEncodedFormContent { public static function parseStream(StreamInterface $stream): UrlEncodedFormContent {
$params = HttpUri::parseQueryString((string)$stream); return new UrlEncodedFormContent($stream, HttpUri::parseQueryString((string)$stream));
if($stream->isSeekable())
$stream->rewind();
return new UrlEncodedFormContent($stream, $params);
} }
} }

View file

@ -1,7 +1,7 @@
<?php <?php
// RouterProcessors.php // RouterProcessors.php
// Created: 2025-03-15 // Created: 2025-03-15
// Updated: 2025-03-20 // Updated: 2025-03-25
namespace Index\Http\Routing; namespace Index\Http\Routing;
@ -23,7 +23,11 @@ class RouterProcessors implements RouteHandler {
if(!$contentType->equals('application/x-www-form-urlencoded')) if(!$contentType->equals('application/x-www-form-urlencoded'))
return false; return false;
$context->deps->register(UrlEncodedFormContent::parseStream($request->getBody())); $stream = $request->getBody();
if($stream->isSeekable())
$stream->rewind();
$context->deps->register(UrlEncodedFormContent::parseStream($stream));
return true; return true;
} }
@ -44,7 +48,11 @@ class RouterProcessors implements RouteHandler {
if(empty($boundary)) if(empty($boundary))
return false; return false;
$context->deps->register(MultipartFormContent::parseStream($request->getBody(), $boundary)); $stream = $request->getBody();
if($stream->isSeekable())
$stream->rewind();
$context->deps->register(MultipartFormContent::parseStream($stream, $boundary));
return true; return true;
} }