@@ -2457,16 +2457,17 @@ static void do_soap_call(zend_execute_data *execute_data,
2457
2457
}
2458
2458
/* }}} */
2459
2459
2460
- static void verify_soap_headers_array (HashTable * ht ) /* {{{ */
2460
+ static bool verify_soap_headers_array (const HashTable * ht ) /* {{{ */
2461
2461
{
2462
2462
zval * tmp ;
2463
2463
2464
2464
ZEND_HASH_FOREACH_VAL (ht , tmp ) {
2465
2465
if (Z_TYPE_P (tmp ) != IS_OBJECT ||
2466
2466
!instanceof_function (Z_OBJCE_P (tmp ), soap_header_class_entry )) {
2467
- php_error_docref ( NULL , E_ERROR , "Invalid SOAP header" ) ;
2467
+ return false ;
2468
2468
}
2469
2469
} ZEND_HASH_FOREACH_END ();
2470
+ return true;
2470
2471
}
2471
2472
/* }}} */
2472
2473
@@ -2599,7 +2600,9 @@ PHP_METHOD(SoapClient, __soapCall)
2599
2600
if (headers == NULL || Z_TYPE_P (headers ) == IS_NULL ) {
2600
2601
} else if (Z_TYPE_P (headers ) == IS_ARRAY ) {
2601
2602
soap_headers = Z_ARRVAL_P (headers );
2602
- verify_soap_headers_array (soap_headers );
2603
+ if (!verify_soap_headers_array (soap_headers )) {
2604
+ php_error_docref (NULL , E_ERROR , "Invalid SOAP header" );
2605
+ }
2603
2606
free_soap_headers = false;
2604
2607
} else if (Z_TYPE_P (headers ) == IS_OBJECT && instanceof_function (Z_OBJCE_P (headers ), soap_header_class_entry )) {
2605
2608
soap_headers = zend_new_array (0 );
@@ -2808,7 +2811,9 @@ PHP_METHOD(SoapClient, __setSoapHeaders)
2808
2811
if (headers == NULL || Z_TYPE_P (headers ) == IS_NULL ) {
2809
2812
convert_to_null (Z_CLIENT_DEFAULT_HEADERS_P (this_ptr ));
2810
2813
} else if (Z_TYPE_P (headers ) == IS_ARRAY ) {
2811
- verify_soap_headers_array (Z_ARRVAL_P (headers ));
2814
+ if (!verify_soap_headers_array (Z_ARRVAL_P (headers ))) {
2815
+ php_error_docref (NULL , E_ERROR , "Invalid SOAP header" );
2816
+ }
2812
2817
zval_ptr_dtor (Z_CLIENT_DEFAULT_HEADERS_P (this_ptr ));
2813
2818
ZVAL_COPY (Z_CLIENT_DEFAULT_HEADERS_P (this_ptr ), headers );
2814
2819
} else if (Z_TYPE_P (headers ) == IS_OBJECT &&
0 commit comments