diff --git a/src/Exception/RequestException.php b/src/Exception/RequestException.php index 39de327e7..f38ca8646 100644 --- a/src/Exception/RequestException.php +++ b/src/Exception/RequestException.php @@ -126,7 +126,7 @@ public static function getResponseBodySummary(ResponseInterface $response) { $body = $response->getBody(); - if (!$body->isSeekable()) { + if (!$body->isSeekable() || !$body->isReadable()) { return null; } diff --git a/tests/Exception/RequestExceptionTest.php b/tests/Exception/RequestExceptionTest.php index 6f70b3985..f72caf0f5 100644 --- a/tests/Exception/RequestExceptionTest.php +++ b/tests/Exception/RequestExceptionTest.php @@ -4,6 +4,7 @@ use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\Request; use GuzzleHttp\Psr7\Response; +use GuzzleHttp\Psr7\Stream; use PHPUnit\Framework\TestCase; /** @@ -174,4 +175,27 @@ public function testObfuscateUrlWithUsernameAndPassword() $e = RequestException::create($r, new Response(500)); $this->assertContains('http://user:***@www.oo.com', $e->getMessage()); } + + public function testGetResponseBodySummaryOfNonReadableStream() + { + $this->assertNull(RequestException::getResponseBodySummary(new Response(500, [], new ReadSeekOnlyStream()))); + } +} + +final class ReadSeekOnlyStream extends Stream +{ + public function __construct() + { + parent::__construct(fopen('php://memory', 'wb')); + } + + public function isSeekable() + { + return true; + } + + public function isReadable() + { + return false; + } }