diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index 8ce1987ba56..0e9f953a2a2 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -4041,6 +4041,11 @@ static void php_ldap_exop(INTERNAL_FUNCTION_PARAMETERS, bool force_sync) { RETURN_THROWS(); } + if (ZSTR_LEN(reqoid) == 0) { + zend_argument_must_not_be_empty_error(2); + RETURN_THROWS(); + } + ld = Z_LDAP_LINK_P(link); VERIFY_LDAP_LINK_CONNECTED(ld); diff --git a/ext/ldap/tests/gh18902.phpt b/ext/ldap/tests/gh18902.phpt new file mode 100644 index 00000000000..329cbb59c1b --- /dev/null +++ b/ext/ldap/tests/gh18902.phpt @@ -0,0 +1,30 @@ +--TEST-- +GH-17704 (ldap_search fails when $attributes contains a non-packed array with numerical keys) +--EXTENSIONS-- +ldap +--FILE-- +getMessage(), PHP_EOL; +} + +try { + ldap_exop_sync($conn,""); +} catch (\ValueError $e) { + echo $e->getMessage(), PHP_EOL; +} + +try { + ldap_exop_sync($conn,"test\0"); +} catch (\ValueError $e) { + echo $e->getMessage(), PHP_EOL; +} +?> +--EXPECTF-- +ldap_exop(): Argument #2 ($request_oid) must not contain any null bytes +ldap_exop_sync(): Argument #2 ($request_oid) must not be empty +ldap_exop_sync(): Argument #2 ($request_oid) must not contain any null bytes