@@ -2437,16 +2437,17 @@ static void do_soap_call(zend_execute_data *execute_data,
2437
2437
}
2438
2438
/* }}} */
2439
2439
2440
- static void verify_soap_headers_array (HashTable * ht ) /* {{{ */
2440
+ static bool verify_soap_headers_array (const HashTable * ht ) /* {{{ */
2441
2441
{
2442
2442
zval * tmp ;
2443
2443
2444
2444
ZEND_HASH_FOREACH_VAL (ht , tmp ) {
2445
2445
if (Z_TYPE_P (tmp ) != IS_OBJECT ||
2446
2446
!instanceof_function (Z_OBJCE_P (tmp ), soap_header_class_entry )) {
2447
- php_error_docref ( NULL , E_ERROR , "Invalid SOAP header" ) ;
2447
+ return false ;
2448
2448
}
2449
2449
} ZEND_HASH_FOREACH_END ();
2450
+ return true;
2450
2451
}
2451
2452
/* }}} */
2452
2453
@@ -2579,7 +2580,9 @@ PHP_METHOD(SoapClient, __soapCall)
2579
2580
if (headers == NULL || Z_TYPE_P (headers ) == IS_NULL ) {
2580
2581
} else if (Z_TYPE_P (headers ) == IS_ARRAY ) {
2581
2582
soap_headers = Z_ARRVAL_P (headers );
2582
- verify_soap_headers_array (soap_headers );
2583
+ if (!verify_soap_headers_array (soap_headers )) {
2584
+ php_error_docref (NULL , E_ERROR , "Invalid SOAP header" );
2585
+ }
2583
2586
free_soap_headers = false;
2584
2587
} else if (Z_TYPE_P (headers ) == IS_OBJECT && instanceof_function (Z_OBJCE_P (headers ), soap_header_class_entry )) {
2585
2588
soap_headers = zend_new_array (0 );
@@ -2788,7 +2791,9 @@ PHP_METHOD(SoapClient, __setSoapHeaders)
2788
2791
if (headers == NULL || Z_TYPE_P (headers ) == IS_NULL ) {
2789
2792
convert_to_null (Z_CLIENT_DEFAULT_HEADERS_P (this_ptr ));
2790
2793
} else if (Z_TYPE_P (headers ) == IS_ARRAY ) {
2791
- verify_soap_headers_array (Z_ARRVAL_P (headers ));
2794
+ if (!verify_soap_headers_array (Z_ARRVAL_P (headers ))) {
2795
+ php_error_docref (NULL , E_ERROR , "Invalid SOAP header" );
2796
+ }
2792
2797
zval_ptr_dtor (Z_CLIENT_DEFAULT_HEADERS_P (this_ptr ));
2793
2798
ZVAL_COPY (Z_CLIENT_DEFAULT_HEADERS_P (this_ptr ), headers );
2794
2799
} else if (Z_TYPE_P (headers ) == IS_OBJECT &&
0 commit comments