Skip to content

Commit 3ca8e48

Browse files
authored
Request's Header allows string[] only (#491)
* Request's Header allows string[] only * Deactivate psalm impossible null argument * Fix possible null value
1 parent 94343ea commit 3ca8e48

File tree

3 files changed

+11
-12
lines changed

3 files changed

+11
-12
lines changed

src/AbstractApi.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ final protected function getResponse(Request $request, ?RequestContext $context
103103

104104
$length = $request->getBody()->length();
105105
if (null !== $length && !$request->hasHeader('content-length')) {
106-
$request->setHeader('content-length', $length);
106+
$request->setHeader('content-length', (string) $length);
107107
}
108108

109109
// Some servers (like testing Docker Images) does not supports `Transfer-Encoding: chunked` requests.

src/Request.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,16 @@ class Request
2929
private $parsed;
3030

3131
/**
32-
* @param string[]|string[][] $headers
32+
* @param string[] $query
33+
* @param string[] $headers
3334
*/
3435
public function __construct(string $method, string $uri, array $query, array $headers, RequestStream $body)
3536
{
3637
$this->method = $method;
3738
$this->uri = $uri;
3839
$this->headers = [];
3940
foreach ($headers as $key => $value) {
40-
$this->headers[\strtolower($key)] = $value;
41+
$this->headers[\strtolower($key)] = (string) $value;
4142
}
4243
$this->body = $body;
4344
$this->query = $query;
@@ -64,7 +65,7 @@ public function hasHeader($name): bool
6465
return \array_key_exists(strtolower($name), $this->headers);
6566
}
6667

67-
public function setHeader($name, $value): void
68+
public function setHeader($name, ?string $value): void
6869
{
6970
$this->headers[strtolower($name)] = $value;
7071
}
@@ -74,10 +75,7 @@ public function getHeaders(): array
7475
return $this->headers;
7576
}
7677

77-
/**
78-
* @return string|string[]
79-
*/
80-
public function getHeader(string $name)
78+
public function getHeader(string $name): ?string
8179
{
8280
return $this->headers[strtolower($name)] ?? null;
8381
}

src/Signer/SignerV4.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ public function sign(Request $request, Credentials $credentials, RequestContext
8383
protected function buildBodyDigest(Request $request, bool $isPresign): string
8484
{
8585
if ($request->hasHeader('x-amz-content-sha256')) {
86-
$hash = ((array) $request->getHeader('x-amz-content-sha256'))[0];
86+
/** @var string $hash */
87+
$hash = $request->getHeader('x-amz-content-sha256');
8788
} else {
8889
$body = $request->getBody();
8990
if ($body instanceof ReadOnceResultStream) {
@@ -257,7 +258,7 @@ private function convertBodyToStream(Request $request, \DateTimeImmutable $now,
257258
{
258259
$body = $request->getBody();
259260
if ($request->hasHeader('content-length')) {
260-
$contentLength = (int) ((array) $request->getHeader('content-length'))[0];
261+
$contentLength = (int) $request->getHeader('content-length');
261262
} else {
262263
$contentLength = $body->length();
263264
}
@@ -278,14 +279,14 @@ private function convertBodyToStream(Request $request, \DateTimeImmutable $now,
278279

279280
// Convert the body into a chunked stream
280281
$request->setHeader('content-encoding', 'aws-chunked');
281-
$request->setHeader('x-amz-decoded-content-length', $contentLength);
282+
$request->setHeader('x-amz-decoded-content-length', (string) $contentLength);
282283
$request->setHeader('x-amz-content-sha256', 'STREAMING-' . self::ALGORITHM_CHUNK);
283284

284285
// Compute size of content + metadata used sign each Chunk
285286
$chunkCount = (int) ceil($contentLength / self::CHUNK_SIZE);
286287
$fullChunkCount = $chunkCount * self::CHUNK_SIZE === $contentLength ? $chunkCount : ($chunkCount - 1);
287288
$metaLength = \strlen(";chunk-signature=\r\n\r\n") + 64;
288-
$request->setHeader('content-length', $contentLength + $fullChunkCount * ($metaLength + \strlen((string) dechex(self::CHUNK_SIZE))) + ($chunkCount - $fullChunkCount) * ($metaLength + \strlen((string) dechex($contentLength % self::CHUNK_SIZE))) + $metaLength + 1);
289+
$request->setHeader('content-length', (string) ($contentLength + $fullChunkCount * ($metaLength + \strlen((string) dechex(self::CHUNK_SIZE))) + ($chunkCount - $fullChunkCount) * ($metaLength + \strlen((string) dechex($contentLength % self::CHUNK_SIZE))) + $metaLength + 1));
289290

290291
$body = IterableStream::create((function (RequestStream $body) use ($now, $credentialString, $signingKey, &$signature): iterable {
291292
foreach (FixedSizeStream::create($body, self::CHUNK_SIZE) as $chunk) {

0 commit comments

Comments
 (0)