Skip to content

Commit 2d3ac4e

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: Fix NULL deref on high modification key
2 parents b50f7c2 + bfa2cfc commit 2d3ac4e

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

Diff for: ext/ldap/ldap.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -2759,7 +2759,7 @@ PHP_FUNCTION(ldap_modify_batch)
27592759

27602760
/* for each modification */
27612761
zend_ulong modification_index = 0;
2762-
ZEND_HASH_FOREACH_NUM_KEY_VAL(modifications, modification_index, modification_zv) {
2762+
ZEND_HASH_FOREACH_VAL(modifications, modification_zv) {
27632763
ldap_mods[modification_index] = safe_emalloc(1, sizeof(LDAPMod), 0);
27642764

27652765
zval *attrib_zv = zend_hash_str_find_deref(Z_ARRVAL_P(modification_zv), LDAP_MODIFY_BATCH_ATTRIB, strlen(LDAP_MODIFY_BATCH_ATTRIB));
@@ -2822,6 +2822,8 @@ PHP_FUNCTION(ldap_modify_batch)
28222822
/* NULL-terminate values */
28232823
ldap_mods[modification_index]->mod_bvalues[num_modification_values] = NULL;
28242824
}
2825+
2826+
modification_index++;
28252827
} ZEND_HASH_FOREACH_END();
28262828

28272829
/* NULL-terminate modifications */

Diff for: ext/ldap/tests/ldap_modify_batch_error.phpt

+13
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,16 @@ $mods = array(
5959
)
6060
);
6161

62+
var_dump(ldap_modify_batch($link, "dc=my-domain,$base", $mods));
63+
64+
// high key with invalid attribute type
65+
$mods = [
66+
99999 => [
67+
"attrib" => "weirdAttribute",
68+
"modtype" => LDAP_MODIFY_BATCH_ADD,
69+
"values" => ["value1"],
70+
],
71+
];
6272
var_dump(ldap_modify_batch($link, "dc=my-domain,$base", $mods));
6373
?>
6474
--CLEAN--
@@ -81,3 +91,6 @@ bool(false)
8191

8292
Warning: ldap_modify_batch(): Batch Modify: Undefined attribute type in %s on line %d
8393
bool(false)
94+
95+
Warning: ldap_modify_batch(): Batch Modify: Undefined attribute type in %s on line %d
96+
bool(false)

0 commit comments

Comments
 (0)