@@ -2194,7 +2194,7 @@ PHP_FUNCTION(ldap_dn2ufn)
21942194static void php_ldap_do_modify (INTERNAL_FUNCTION_PARAMETERS , int oper , int ext )
21952195{
21962196 zval * serverctrls = NULL ;
2197- zval * link , * entry , * value , * ivalue ;
2197+ zval * link , * entry , * value ;
21982198 ldap_linkdata * ld ;
21992199 char * dn ;
22002200 LDAPMod * * ldap_mods ;
@@ -2279,18 +2279,21 @@ static void php_ldap_do_modify(INTERNAL_FUNCTION_PARAMETERS, int oper, int ext)
22792279 ldap_mods [i ]-> mod_bvalues = NULL ;
22802280 goto cleanup ;
22812281 }
2282+ if (!zend_array_is_list (Z_ARRVAL_P (value ))) {
2283+ zend_argument_value_error (3 , "must be a list of attribute values" );
2284+ RETVAL_FALSE ;
2285+ num_berval [i ] = 0 ;
2286+ num_attribs = i + 1 ;
2287+ ldap_mods [i ]-> mod_bvalues = NULL ;
2288+ goto cleanup ;
2289+ }
22822290
22832291 num_berval [i ] = num_values ;
22842292 ldap_mods [i ]-> mod_bvalues = safe_emalloc ((num_values + 1 ), sizeof (struct berval * ), 0 );
22852293
22862294 for (j = 0 ; j < num_values ; j ++ ) {
2287- if ((ivalue = zend_hash_index_find (Z_ARRVAL_P (value ), j )) == NULL ) {
2288- zend_argument_value_error (3 , "must contain arrays with consecutive integer indices starting from 0" );
2289- num_berval [i ] = j ;
2290- num_attribs = i + 1 ;
2291- RETVAL_FALSE ;
2292- goto cleanup ;
2293- }
2295+ zval * ivalue = zend_hash_index_find (Z_ARRVAL_P (value ), j );
2296+ ZEND_ASSERT (ivalue != NULL );
22942297 convert_to_string (ivalue );
22952298 if (EG (exception )) {
22962299 num_berval [i ] = j ;
0 commit comments