Skip to content

Commit 685bd42

Browse files
committed
Use SORT_STRING for canonicalized query generation, add test new behavior
1 parent 43a0529 commit 685bd42

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

src/Signature/SignatureV4.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ private function getCanonicalizedQuery(array $query)
356356
if (!is_array($v)) {
357357
$qs .= rawurlencode($k) . '=' . rawurlencode($v !== null ? $v : '') . '&';
358358
} else {
359-
sort($v);
359+
sort($v, SORT_STRING);
360360
foreach ($v as $value) {
361361
$qs .= rawurlencode($k) . '=' . rawurlencode($value !== null ? $value : '') . '&';
362362
}

tests/Signature/SignatureV4Test.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,20 @@ public function testCanonicalQuerySortingOccursAfterEncoding()
367367
$this->assertSame($expectedSigned, Psr7\Message::toString($signed));
368368
}
369369

370+
public function testCanonicalizedQuerySortingParameterMultiOccurrenceNumericValues(): void
371+
{
372+
$signature = new SignatureV4('service', 'region');
373+
374+
$canonicalizedQuery = new \ReflectionMethod($signature, 'getCanonicalizedQuery');
375+
$parameters = [
376+
'parameter1' => ['100', '50'],
377+
'parameter2' => 'value',
378+
];
379+
380+
$query = $canonicalizedQuery->invoke($signature, $parameters);
381+
$this->assertSame('parameter1=100&parameter1=50&parameter2=value', $query);
382+
}
383+
370384
public function testEnsuresContentSha256CanBeCalculated()
371385
{
372386
$this->expectException(\Aws\Exception\CouldNotCreateChecksumException::class);

0 commit comments

Comments
 (0)