Skip to content

Commit 804c8e4

Browse files
committed
Bugfix: enable strict mode for base64_decode
1 parent c4a41ee commit 804c8e4

File tree

4 files changed

+10
-9
lines changed

4 files changed

+10
-9
lines changed

src/SAML2/HTTPArtifact.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ public function receive(ServerRequestInterface $request): AbstractMessage
124124
{
125125
$query = $request->getQueryParams();
126126
if (array_key_exists('SAMLart', $query)) {
127-
$artifact = base64_decode($query['SAMLart']);
127+
Assert::stringPlausibleBase64($query['SAMLart'], 'Error while base64 decoding SAML message.', Exception::class);
128+
$artifact = base64_decode($query['SAMLart'], true); // Error handling already dealt with by assertion
129+
128130
$endpointIndex = bin2hex(substr($artifact, 2, 2));
129131
$sourceId = bin2hex(substr($artifact, 4, 20));
130132
} else {

src/SAML2/HTTPPost.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ public function receive(ServerRequestInterface $request): AbstractMessage
9090
throw new Exception('Missing SAMLRequest or SAMLResponse parameter.');
9191
}
9292

93-
$msgStr = base64_decode($msgStr);
93+
Assert::stringPlausibleBase64($msgStr, 'Error while base64 decoding SAML message.', Exception::class);
94+
$msgStr = base64_decode($msgStr, true); // Error handling already dealt with by assertion
9495
$msgStr = DOMDocumentFactory::fromString($msgStr)->saveXML();
9596

9697
$document = DOMDocumentFactory::fromString($msgStr);

src/SAML2/HTTPRedirect.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,8 @@ public function receive(ServerRequestInterface $request): AbstractMessage
139139
throw new Exception(sprintf('Unknown SAMLEncoding: %s', $query['SAMLEncoding']));
140140
}
141141

142-
$message = base64_decode($message);
143-
if ($message === false) {
144-
throw new Exception('Error while base64 decoding SAML message.');
145-
}
142+
Assert::stringPlausibleBase64($message, 'Error while base64 decoding SAML message.', Exception::class);
143+
$message = base64_decode($message, true); // Error handling already dealt with by assertion
146144

147145
$message = gzinflate($message);
148146
if ($message === false) {

tests/SAML2/HTTPRedirectTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ public function testSignedRequestValidation(): void
174174
$signedQuery = 'SAMLRequest=' . urlencode($q['SAMLRequest']);
175175
$signedQuery .= '&RelayState=' . urlencode($q['RelayState']);
176176
$signedQuery .= '&SigAlg=' . urlencode($q['SigAlg']);
177-
$this->assertTrue($verifier->verify($signedQuery, base64_decode($q['Signature'])));
177+
$this->assertTrue($verifier->verify($signedQuery, base64_decode($q['Signature'], true)));
178178

179179
// validate with another cert, should fail
180180
$verifier = (new SignatureAlgorithmFactory())->getAlgorithm(
@@ -185,7 +185,7 @@ public function testSignedRequestValidation(): void
185185
$signedQuery = 'SAMLRequest=' . urlencode($q['SAMLRequest']);
186186
$signedQuery .= '&RelayState=' . urlencode($q['RelayState']);
187187
$signedQuery .= '&SigAlg=' . urlencode($q['SigAlg']);
188-
$this->assertFalse($verifier->verify($signedQuery, base64_decode($q['Signature'])));
188+
$this->assertFalse($verifier->verify($signedQuery, base64_decode($q['Signature'], true)));
189189
}
190190

191191

@@ -263,7 +263,7 @@ public function testInvalidRequestData(): void
263263
$request = $request->withQueryParams($q);
264264

265265
$this->expectException(Exception::class);
266-
$this->expectExceptionMessage('Error while inflating');
266+
$this->expectExceptionMessage('Error while base64 decoding SAML message.');
267267
$hr = new HTTPRedirect();
268268
@$hr->receive($request);
269269
}

0 commit comments

Comments
 (0)