@@ -2451,16 +2451,17 @@ static void do_soap_call(zend_execute_data *execute_data,
2451
2451
}
2452
2452
/* }}} */
2453
2453
2454
- static void verify_soap_headers_array (HashTable * ht ) /* {{{ */
2454
+ static bool verify_soap_headers_array (const HashTable * ht ) /* {{{ */
2455
2455
{
2456
2456
zval * tmp ;
2457
2457
2458
2458
ZEND_HASH_FOREACH_VAL (ht , tmp ) {
2459
2459
if (Z_TYPE_P (tmp ) != IS_OBJECT ||
2460
2460
!instanceof_function (Z_OBJCE_P (tmp ), soap_header_class_entry )) {
2461
- php_error_docref ( NULL , E_ERROR , "Invalid SOAP header" ) ;
2461
+ return false ;
2462
2462
}
2463
2463
} ZEND_HASH_FOREACH_END ();
2464
+ return true;
2464
2465
}
2465
2466
/* }}} */
2466
2467
@@ -2593,7 +2594,9 @@ PHP_METHOD(SoapClient, __soapCall)
2593
2594
if (headers == NULL || Z_TYPE_P (headers ) == IS_NULL ) {
2594
2595
} else if (Z_TYPE_P (headers ) == IS_ARRAY ) {
2595
2596
soap_headers = Z_ARRVAL_P (headers );
2596
- verify_soap_headers_array (soap_headers );
2597
+ if (!verify_soap_headers_array (soap_headers )) {
2598
+ php_error_docref (NULL , E_ERROR , "Invalid SOAP header" );
2599
+ }
2597
2600
free_soap_headers = false;
2598
2601
} else if (Z_TYPE_P (headers ) == IS_OBJECT && instanceof_function (Z_OBJCE_P (headers ), soap_header_class_entry )) {
2599
2602
soap_headers = zend_new_array (0 );
@@ -2802,7 +2805,9 @@ PHP_METHOD(SoapClient, __setSoapHeaders)
2802
2805
if (headers == NULL || Z_TYPE_P (headers ) == IS_NULL ) {
2803
2806
convert_to_null (Z_CLIENT_DEFAULT_HEADERS_P (this_ptr ));
2804
2807
} else if (Z_TYPE_P (headers ) == IS_ARRAY ) {
2805
- verify_soap_headers_array (Z_ARRVAL_P (headers ));
2808
+ if (!verify_soap_headers_array (Z_ARRVAL_P (headers ))) {
2809
+ php_error_docref (NULL , E_ERROR , "Invalid SOAP header" );
2810
+ }
2806
2811
zval_ptr_dtor (Z_CLIENT_DEFAULT_HEADERS_P (this_ptr ));
2807
2812
ZVAL_COPY (Z_CLIENT_DEFAULT_HEADERS_P (this_ptr ), headers );
2808
2813
} else if (Z_TYPE_P (headers ) == IS_OBJECT &&
0 commit comments