Skip to content

Commit 7f47ba7

Browse files
author
Jamie Hannaford
committed
ensure large bodies do not exceed memory limit
1 parent 292c147 commit 7f47ba7

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

src/Common/Error/Builder.php

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
namespace OpenStack\Common\Error;
44

5-
use function GuzzleHttp\Psr7\str;
65
use GuzzleHttp\Client;
76
use GuzzleHttp\ClientInterface;
87
use GuzzleHttp\Exception\ClientException;
8+
use Psr\Http\Message\MessageInterface;
99
use Psr\Http\Message\RequestInterface;
1010
use Psr\Http\Message\ResponseInterface;
1111

@@ -73,6 +73,34 @@ private function linkIsValid($link)
7373
return $resp->getStatusCode() < 400;
7474
}
7575

76+
private function str(MessageInterface $message)
77+
{
78+
if ($message instanceof RequestInterface) {
79+
$msg = trim($message->getMethod() . ' '
80+
. $message->getRequestTarget())
81+
. ' HTTP/' . $message->getProtocolVersion();
82+
if (!$message->hasHeader('host')) {
83+
$msg .= "\r\nHost: " . $message->getUri()->getHost();
84+
}
85+
} elseif ($message instanceof ResponseInterface) {
86+
$msg = 'HTTP/' . $message->getProtocolVersion() . ' '
87+
. $message->getStatusCode() . ' '
88+
. $message->getReasonPhrase();
89+
} else {
90+
throw new \InvalidArgumentException('Unknown message type');
91+
}
92+
93+
foreach ($message->getHeaders() as $name => $values) {
94+
$msg .= "\r\n{$name}: " . implode(', ', $values);
95+
}
96+
97+
if ($message->getBody()->getSize() < ini_get('memory_limit')) {
98+
$msg .= "\r\n\r\n" . $message->getBody();
99+
}
100+
101+
return $msg;
102+
}
103+
76104
/**
77105
* Helper method responsible for constructing and returning {@see BadResponseError} exceptions.
78106
*
@@ -89,10 +117,10 @@ public function httpError(RequestInterface $request, ResponseInterface $response
89117
$response->getStatusCode(), $response->getReasonPhrase());
90118

91119
$message .= $this->header('Request');
92-
$message .= trim(str($request)) . PHP_EOL . PHP_EOL;
120+
$message .= trim($this->str($request)) . PHP_EOL . PHP_EOL;
93121

94122
$message .= $this->header('Response');
95-
$message .= trim(str($response)) . PHP_EOL . PHP_EOL;
123+
$message .= trim($this->str($response)) . PHP_EOL . PHP_EOL;
96124

97125
$message .= $this->header('Further information');
98126
$message .= $this->getStatusCodeMessage($response->getStatusCode());

0 commit comments

Comments
 (0)