Skip to content

Commit 06bbb65

Browse files
committed
Fix hash_pbkdf2() with missing $length argument
Also change the type of some string length variables to ensure that the zpp call works correctly on platforms where sizeof(int) != sizeof(long).
1 parent 68f318a commit 06bbb65

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ PHP NEWS
1919
. Fixed bug #66869 (Invalid 2nd argument crashes imageaffinematrixget) (Pierre)
2020
. Fixed bug #66890 (imagescale segfault). (Remi)
2121

22+
- Hash:
23+
. hash_pbkdf2() now works correctly if the $length argument is not specified.
24+
(Nikita)
25+
2226
- Mail:
2327
. Fixed bug #66535 (Don't add newline after X-PHP-Originating-Script) (Tjerk)
2428

ext/hash/hash.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -609,16 +609,15 @@ Generate a PBKDF2 hash of the given password and salt
609609
Returns lowercase hexits by default */
610610
PHP_FUNCTION(hash_pbkdf2)
611611
{
612-
char *returnval, *algo, *salt, *pass = NULL;
613-
unsigned char *computed_salt, *digest, *temp, *result, *K1, *K2 = NULL;
614-
long loops, i, j, algo_len, pass_len, iterations, length, digest_length = 0;
615-
int argc, salt_len = 0;
612+
char *returnval, *algo, *salt, *pass;
613+
unsigned char *computed_salt, *digest, *temp, *result, *K1, *K2;
614+
long loops, i, j, iterations, length = 0, digest_length;
615+
int algo_len, pass_len, salt_len;
616616
zend_bool raw_output = 0;
617617
const php_hash_ops *ops;
618618
void *context;
619619

620-
argc = ZEND_NUM_ARGS();
621-
if (zend_parse_parameters(argc TSRMLS_CC, "sssl|lb", &algo, &algo_len, &pass, &pass_len, &salt, &salt_len, &iterations, &length, &raw_output) == FAILURE) {
620+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sssl|lb", &algo, &algo_len, &pass, &pass_len, &salt, &salt_len, &iterations, &length, &raw_output) == FAILURE) {
622621
return;
623622
}
624623

ext/hash/tests/hash_pbkdf2_basic.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Test hash_pbkdf2() function : basic functionality
55
--FILE--
66
<?php
77

8-
/* Prototype : string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output ] )
8+
/* Prototype : string hash_hmac(string $algo, string $data, string $key [, int $length = 0 [, bool $raw_output = false]])
99
* Description: Generate a keyed hash value using the HMAC method
1010
* Source code: ext/hash/hash.c
1111
* Alias to functions:
@@ -14,10 +14,12 @@ Test hash_pbkdf2() function : basic functionality
1414
echo "*** Testing hash_pbkdf2() : basic functionality ***\n";
1515

1616
echo "sha1: " . hash_pbkdf2('sha1', 'password', 'salt', 1, 20)."\n";
17+
echo "sha1(no length): " . hash_pbkdf2('sha1', 'password', 'salt', 1)."\n";
1718
echo "sha1(raw): " . bin2hex(hash_pbkdf2('sha1', 'password', 'salt', 1, 20, TRUE))."\n";
1819
echo "sha1(rounds): " . hash_pbkdf2('sha1', 'passwordPASSWORDpassword', 'saltSALTsaltSALTsaltSALTsaltSALTsalt', 4096, 25)."\n";
1920
echo "sha1(rounds)(raw): " . bin2hex(hash_pbkdf2('sha1', 'passwordPASSWORDpassword', 'saltSALTsaltSALTsaltSALTsaltSALTsalt', 4096, 25, TRUE))."\n";
2021
echo "sha256: " . hash_pbkdf2('sha256', 'password', 'salt', 1, 20)."\n";
22+
echo "sha256(no length): " . hash_pbkdf2('sha256', 'password', 'salt', 1)."\n";
2123
echo "sha256(raw): " . bin2hex(hash_pbkdf2('sha256', 'password', 'salt', 1, 20, TRUE))."\n";
2224
echo "sha256(rounds): " . hash_pbkdf2('sha256', 'passwordPASSWORDpassword', 'saltSALTsaltSALTsaltSALTsaltSALTsalt', 4096, 40)."\n";
2325
echo "sha256(rounds)(raw): " . bin2hex(hash_pbkdf2('sha256', 'passwordPASSWORDpassword', 'saltSALTsaltSALTsaltSALTsaltSALTsalt', 4096, 40, TRUE))."\n";
@@ -27,10 +29,12 @@ echo "sha256(rounds)(raw): " . bin2hex(hash_pbkdf2('sha256', 'passwordPASSWORDpa
2729
--EXPECT--
2830
*** Testing hash_pbkdf2() : basic functionality ***
2931
sha1: 0c60c80f961f0e71f3a9
32+
sha1(no length): 0c60c80f961f0e71f3a9b524af6012062fe037a6
3033
sha1(raw): 0c60c80f961f0e71f3a9b524af6012062fe037a6
3134
sha1(rounds): 3d2eec4fe41c849b80c8d8366
3235
sha1(rounds)(raw): 3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038
3336
sha256: 120fb6cffcf8b32c43e7
37+
sha256(no length): 120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b
3438
sha256(raw): 120fb6cffcf8b32c43e7225256c4f837a86548c9
3539
sha256(rounds): 348c89dbcbd32b2f32d814b8116e84cf2b17347e
3640
sha256(rounds)(raw): 348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9

0 commit comments

Comments
 (0)