Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c1d67c2

Browse files
committed
Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3: ext/hash: Fix GH-16711: Segfault in mhash() ext/hash: Add failing tests for GH-16711
2 parents 41347f0 + f01bafc commit c1d67c2

File tree

4 files changed

+203
-0
lines changed

4 files changed

+203
-0
lines changed

‎NEWS‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ PHP NEWS
1111
- Curl:
1212
. Fixed bug GH-16723 (CURLMOPT_PUSHFUNCTION issues). (cmb)
1313

14+
- Hash:
15+
. Fixed GH-16711: Segfault in mhash(). (Girgias)
16+
1417
- PDO:
1518
. Fixed memory leak of `setFetchMode()`. (SakiTakamachi)
1619

‎ext/hash/hash.c‎

Lines changed: 4 additions & 0 deletions
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‎

Lines changed: 98 additions & 0 deletions
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‎

Lines changed: 98 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /