Skip to content

Commit 4643148

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: ext/hash: Fix phpGH-16711: Segfault in mhash() ext/hash: Add failing tests for phpGH-16711
2 parents 067ac63 + c1d67c2 commit 4643148

File tree

3 files changed

+200
-0
lines changed

3 files changed

+200
-0
lines changed

ext/hash/hash.c

+4
Original file line numberDiff line numberDiff line change
@@ -1212,7 +1212,11 @@ PHP_FUNCTION(mhash)
12121212
struct mhash_bc_entry algorithm_lookup = mhash_to_hash[algorithm];
12131213
if (algorithm_lookup.hash_name) {
12141214
algo = zend_string_init(algorithm_lookup.hash_name, strlen(algorithm_lookup.hash_name), 0);
1215+
} else {
1216+
RETURN_FALSE;
12151217
}
1218+
} else {
1219+
RETURN_FALSE;
12161220
}
12171221

12181222
if (key) {

ext/hash/tests/gh16711_1.phpt

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
--TEST--
2+
GH-16711: Segmentation fault in mhash()
3+
--SKIPIF--
4+
<?php if(!function_exists('mhash')) { die('skip mhash compatibility layer not available'); } ?>
5+
--FILE--
6+
<?php
7+
8+
$re = new ReflectionExtension("hash");
9+
var_dump($re->getConstants());
10+
11+
var_dump(mhash(133, 1086849124, 133));
12+
?>
13+
--EXPECTF--
14+
array(40) {
15+
["HASH_HMAC"]=>
16+
int(1)
17+
["MHASH_CRC32"]=>
18+
int(0)
19+
["MHASH_MD5"]=>
20+
int(1)
21+
["MHASH_SHA1"]=>
22+
int(2)
23+
["MHASH_HAVAL256"]=>
24+
int(3)
25+
["MHASH_RIPEMD160"]=>
26+
int(5)
27+
["MHASH_TIGER"]=>
28+
int(7)
29+
["MHASH_GOST"]=>
30+
int(8)
31+
["MHASH_CRC32B"]=>
32+
int(9)
33+
["MHASH_HAVAL224"]=>
34+
int(10)
35+
["MHASH_HAVAL192"]=>
36+
int(11)
37+
["MHASH_HAVAL160"]=>
38+
int(12)
39+
["MHASH_HAVAL128"]=>
40+
int(13)
41+
["MHASH_TIGER128"]=>
42+
int(14)
43+
["MHASH_TIGER160"]=>
44+
int(15)
45+
["MHASH_MD4"]=>
46+
int(16)
47+
["MHASH_SHA256"]=>
48+
int(17)
49+
["MHASH_ADLER32"]=>
50+
int(18)
51+
["MHASH_SHA224"]=>
52+
int(19)
53+
["MHASH_SHA512"]=>
54+
int(20)
55+
["MHASH_SHA384"]=>
56+
int(21)
57+
["MHASH_WHIRLPOOL"]=>
58+
int(22)
59+
["MHASH_RIPEMD128"]=>
60+
int(23)
61+
["MHASH_RIPEMD256"]=>
62+
int(24)
63+
["MHASH_RIPEMD320"]=>
64+
int(25)
65+
["MHASH_SNEFRU256"]=>
66+
int(27)
67+
["MHASH_MD2"]=>
68+
int(28)
69+
["MHASH_FNV132"]=>
70+
int(29)
71+
["MHASH_FNV1A32"]=>
72+
int(30)
73+
["MHASH_FNV164"]=>
74+
int(31)
75+
["MHASH_FNV1A64"]=>
76+
int(32)
77+
["MHASH_JOAAT"]=>
78+
int(33)
79+
["MHASH_CRC32C"]=>
80+
int(34)
81+
["MHASH_MURMUR3A"]=>
82+
int(35)
83+
["MHASH_MURMUR3C"]=>
84+
int(36)
85+
["MHASH_MURMUR3F"]=>
86+
int(37)
87+
["MHASH_XXH32"]=>
88+
int(38)
89+
["MHASH_XXH64"]=>
90+
int(39)
91+
["MHASH_XXH3"]=>
92+
int(40)
93+
["MHASH_XXH128"]=>
94+
int(41)
95+
}
96+
97+
Deprecated: Function mhash() is deprecated in %s on line %d
98+
bool(false)

ext/hash/tests/gh16711_2.phpt

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
--TEST--
2+
GH-16711: Segmentation fault in mhash()
3+
--SKIPIF--
4+
<?php if(!function_exists('mhash')) { die('skip mhash compatibility layer not available'); } ?>
5+
--FILE--
6+
<?php
7+
8+
$re = new ReflectionExtension("hash");
9+
var_dump($re->getConstants());
10+
11+
var_dump(mhash(4, 1086849124, 133));
12+
?>
13+
--EXPECTF--
14+
array(40) {
15+
["HASH_HMAC"]=>
16+
int(1)
17+
["MHASH_CRC32"]=>
18+
int(0)
19+
["MHASH_MD5"]=>
20+
int(1)
21+
["MHASH_SHA1"]=>
22+
int(2)
23+
["MHASH_HAVAL256"]=>
24+
int(3)
25+
["MHASH_RIPEMD160"]=>
26+
int(5)
27+
["MHASH_TIGER"]=>
28+
int(7)
29+
["MHASH_GOST"]=>
30+
int(8)
31+
["MHASH_CRC32B"]=>
32+
int(9)
33+
["MHASH_HAVAL224"]=>
34+
int(10)
35+
["MHASH_HAVAL192"]=>
36+
int(11)
37+
["MHASH_HAVAL160"]=>
38+
int(12)
39+
["MHASH_HAVAL128"]=>
40+
int(13)
41+
["MHASH_TIGER128"]=>
42+
int(14)
43+
["MHASH_TIGER160"]=>
44+
int(15)
45+
["MHASH_MD4"]=>
46+
int(16)
47+
["MHASH_SHA256"]=>
48+
int(17)
49+
["MHASH_ADLER32"]=>
50+
int(18)
51+
["MHASH_SHA224"]=>
52+
int(19)
53+
["MHASH_SHA512"]=>
54+
int(20)
55+
["MHASH_SHA384"]=>
56+
int(21)
57+
["MHASH_WHIRLPOOL"]=>
58+
int(22)
59+
["MHASH_RIPEMD128"]=>
60+
int(23)
61+
["MHASH_RIPEMD256"]=>
62+
int(24)
63+
["MHASH_RIPEMD320"]=>
64+
int(25)
65+
["MHASH_SNEFRU256"]=>
66+
int(27)
67+
["MHASH_MD2"]=>
68+
int(28)
69+
["MHASH_FNV132"]=>
70+
int(29)
71+
["MHASH_FNV1A32"]=>
72+
int(30)
73+
["MHASH_FNV164"]=>
74+
int(31)
75+
["MHASH_FNV1A64"]=>
76+
int(32)
77+
["MHASH_JOAAT"]=>
78+
int(33)
79+
["MHASH_CRC32C"]=>
80+
int(34)
81+
["MHASH_MURMUR3A"]=>
82+
int(35)
83+
["MHASH_MURMUR3C"]=>
84+
int(36)
85+
["MHASH_MURMUR3F"]=>
86+
int(37)
87+
["MHASH_XXH32"]=>
88+
int(38)
89+
["MHASH_XXH64"]=>
90+
int(39)
91+
["MHASH_XXH3"]=>
92+
int(40)
93+
["MHASH_XXH128"]=>
94+
int(41)
95+
}
96+
97+
Deprecated: Function mhash() is deprecated in %s on line %d
98+
bool(false)

0 commit comments

Comments
 (0)