Skip to content

Commit

Permalink
Fix division by zero
Browse files Browse the repository at this point in the history
  • Loading branch information
tvlooy authored and chalasr committed May 11, 2022
1 parent 57c1c25 commit ac64013
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
3 changes: 3 additions & 0 deletions CsrfTokenManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@ private function derandomize(string $value): string
return $value;
}
$key = base64_decode(strtr($parts[1], '-_', '+/'));
if ('' === $key || false === $key) {
return $value;
}
$value = base64_decode(strtr($parts[2], '-_', '+/'));

return $this->xor($value, $key);
Expand Down
20 changes: 20 additions & 0 deletions Tests/CsrfTokenManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,26 @@ public function testNonExistingTokenIsNotValid($namespace, $manager, $storage)
$this->assertFalse($manager->isTokenValid(new CsrfToken('token_id', 'FOOBAR')));
}

public function testTokenShouldNotTriggerDivisionByZero()
{
[$generator, $storage] = $this->getGeneratorAndStorage();
$manager = new CsrfTokenManager($generator, $storage);

// Scenario: the token that was returned is abc.def.ghi, and gets modified in the browser to abc..ghi

$storage->expects($this->once())
->method('hasToken')
->with('https-token_id')
->willReturn(true);

$storage->expects($this->once())
->method('getToken')
->with('https-token_id')
->willReturn('def');

$this->assertFalse($manager->isTokenValid(new CsrfToken('token_id', 'abc..ghi')));
}

/**
* @dataProvider getManagerGeneratorAndStorage
*/
Expand Down

0 comments on commit ac64013

Please sign in to comment.