Skip to content

Commit f01bafc

Browse files
committed
Merge branch 'PHP-8.2' into PHP-8.3
* PHP-8.2: ext/hash: Fix phpGH-16711: Segfault in mhash() ext/hash: Add failing tests for phpGH-16711
2 parents f97353f + 1b379f5 commit f01bafc

File tree

4 files changed

+203
-0
lines changed

4 files changed

+203
-0
lines changed

NEWS

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ PHP NEWS
1111
- FPM:
1212
. Fixed GH-16432 (PHP-FPM 8.2 SIGSEGV in fpm_get_status). (Jakub Zelenka)
1313

14+
- Hash:
15+
. Fixed GH-16711: Segfault in mhash(). (Girgias)
16+
1417
- OpenSSL:
1518
. Prevent unexpected array entry conversion when reading key. (nielsdos)
1619
. Fix various memory leaks related to openssl exports. (nielsdos)

ext/hash/hash.c

+4
Original file line numberDiff line numberDiff line change
@@ -1213,7 +1213,11 @@ PHP_FUNCTION(mhash)
12131213
struct mhash_bc_entry algorithm_lookup = mhash_to_hash[algorithm];
12141214
if (algorithm_lookup.hash_name) {
12151215
algo = zend_string_init(algorithm_lookup.hash_name, strlen(algorithm_lookup.hash_name), 0);
1216+
} else {
1217+
RETURN_FALSE;
12161218
}
1219+
} else {
1220+
RETURN_FALSE;
12171221
}
12181222

12191223
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)