Skip to content

Commit f1ae2ae

Browse files
simonkeySean O'Brien
authored andcommitted
Use SORT_STRING for canonicalized query generation, add test new behavior
1 parent 43a0529 commit f1ae2ae

4 files changed

Lines changed: 22 additions & 8 deletions

File tree

.changes/nextrelease/chore-error-description-support.json

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"type": "bugfix",
4+
"category": "Signature",
5+
"description": "Fixes bug in canonicalized query generation when dealing with numeric values"
6+
}
7+
]

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)