Skip to content

Commit

Permalink
Fixed bug #75221 (Argon2i always throws NUL at the end)
Browse files Browse the repository at this point in the history
Apparently, `argon2_encodedlen()` also counts the terminating NUL byte;
that doesn't appear to be documented somewhere, but from looking at the
implementation[1] it is pretty obvious.  Therefore, the respective
`zend_string` has to be one byte shorter.

[1] <https://github.com/P-H-C/phc-winner-argon2/blob/20161029/src/argon2.c#L431-L436>
  • Loading branch information
cmb69 committed Oct 12, 2017
1 parent ee36507 commit 3f8961d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
3 changes: 3 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ PHP NEWS
- Openssl:
. Fixed bug #75363 (openssl_x509_parse leaks memory). (Bob)

- Standard:
. Fixed bug #75221 (Argon2i always throws NUL at the end). (cmb)

- Zlib:
. Fixed bug #75299 (Wrong reflection on inflate_init and inflate_add). (Fabien
Villepinte)
Expand Down
4 changes: 2 additions & 2 deletions ext/standard/password.c
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ PHP_FUNCTION(password_hash)
#endif
);

encoded = zend_string_alloc(encoded_len, 0);
encoded = zend_string_alloc(encoded_len - 1, 0);
status = argon2_hash(
time_cost,
memory_cost,
Expand All @@ -538,7 +538,7 @@ PHP_FUNCTION(password_hash)
ZSTR_VAL(out),
ZSTR_LEN(out),
ZSTR_VAL(encoded),
ZSTR_LEN(encoded),
encoded_len,
type,
ARGON2_VERSION_NUMBER
);
Expand Down
19 changes: 19 additions & 0 deletions ext/standard/tests/password/bug75221.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
--TEST--
Bug #75221 (Argon2i always throws NUL at the end)
--SKIPIF--
<?php
if (!defined('PASSWORD_ARGON2I')) die('skip password_hash not built with Argon2');
?>
--FILE--
<?php
$hash = password_hash(
"php",
PASSWORD_ARGON2I,
['memory_cost' => 16384, 'time_cost' => 2, 'threads' => 4]
);
var_dump(substr($hash, -1, 1) !== "\0");
?>
===DONE===
--EXPECT--
bool(true)
===DONE===

0 comments on commit 3f8961d

Please sign in to comment.