@@ -149,9 +149,9 @@ static void soap_error_handler(int error_num, const char *error_filename, const
149
149
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(ZEND_THIS),"service", sizeof("service")-1)) != NULL) { \
150
150
ss = (soapServicePtr)zend_fetch_resource_ex(tmp, "service", le_service); \
151
151
} else { \
152
- php_error_docref (NULL, E_WARNING, "Can not fetch service object"); \
152
+ zend_throw_error (NULL, "Cannot fetch SoapServer object"); \
153
153
SOAP_SERVER_END_CODE(); \
154
- return ; \
154
+ RETURN_THROWS() ; \
155
155
} \
156
156
}
157
157
@@ -525,9 +525,10 @@ PHP_METHOD(SoapParam, __construct)
525
525
if (zend_parse_parameters (ZEND_NUM_ARGS (), "zs" , & data , & name , & name_length ) == FAILURE ) {
526
526
RETURN_THROWS ();
527
527
}
528
+
528
529
if (name_length == 0 ) {
529
- php_error_docref ( NULL , E_WARNING , "Invalid parameter name " );
530
- return ;
530
+ zend_argument_value_error ( 2 , "cannot be empty " );
531
+ RETURN_THROWS () ;
531
532
}
532
533
533
534
this_ptr = ZEND_THIS ;
@@ -559,12 +560,12 @@ PHP_METHOD(SoapHeader, __construct)
559
560
ZEND_PARSE_PARAMETERS_END ();
560
561
561
562
if (ns_len == 0 ) {
562
- php_error_docref ( NULL , E_WARNING , "Invalid namespace " );
563
- return ;
563
+ zend_argument_value_error ( 1 , "cannot be empty " );
564
+ RETURN_THROWS () ;
564
565
}
565
566
if (name_len == 0 ) {
566
- php_error_docref ( NULL , E_WARNING , "Invalid header name " );
567
- return ;
567
+ zend_argument_value_error ( 2 , "cannot be empty " );
568
+ RETURN_THROWS () ;
568
569
}
569
570
570
571
this_ptr = ZEND_THIS ;
@@ -579,13 +580,15 @@ PHP_METHOD(SoapHeader, __construct)
579
580
if (ZSTR_LEN (actor_str ) > 2 ) {
580
581
add_property_stringl (this_ptr , "actor" , ZSTR_VAL (actor_str ), ZSTR_LEN (actor_str ));
581
582
} else {
582
- php_error_docref (NULL , E_WARNING , "Invalid actor" );
583
+ zend_argument_value_error (2 , "must be longer than 2 characters" );
584
+ RETURN_THROWS ();
583
585
}
584
586
} else if (!actor_is_null ) {
585
587
if ((actor_long == SOAP_ACTOR_NEXT || actor_long == SOAP_ACTOR_NONE || actor_long == SOAP_ACTOR_UNLIMATERECEIVER )) {
586
588
add_property_long (this_ptr , "actor" , actor_long );
587
589
} else {
588
- php_error_docref (NULL , E_WARNING , "Invalid actor" );
590
+ zend_argument_value_error (5 , "must be either SOAP_ACTOR_NEXT, SOAP_ACTOR_NONE or SOAP_ACTOR_UNLIMATERECEIVER" );
591
+ RETURN_THROWS ();
589
592
}
590
593
}
591
594
}
@@ -624,9 +627,10 @@ PHP_METHOD(SoapFault, __construct)
624
627
}
625
628
626
629
if ((code_str || code_ht ) && (fault_code == NULL || fault_code_len == 0 )) {
627
- php_error_docref ( NULL , E_WARNING , "Invalid fault code " );
628
- return ;
630
+ zend_argument_value_error ( 2 , "is an invalid type ID " );
631
+ RETURN_THROWS () ;
629
632
}
633
+
630
634
if (name != NULL && name_len == 0 ) {
631
635
name = NULL ;
632
636
}
@@ -700,8 +704,8 @@ PHP_METHOD(SoapVar, __construct)
700
704
if (zend_hash_index_exists (& SOAP_GLOBAL (defEncIndex ), type )) {
701
705
add_property_long (this_ptr , "enc_type" , type );
702
706
} else {
703
- php_error_docref ( NULL , E_WARNING , "Invalid type ID " );
704
- return ;
707
+ zend_argument_value_error ( 2 , "is invalid " );
708
+ RETURN_THROWS () ;
705
709
}
706
710
}
707
711
@@ -739,7 +743,7 @@ static HashTable* soap_create_typemap(sdlPtr sdl, HashTable *ht) /* {{{ */
739
743
zend_string * name ;
740
744
741
745
if (Z_TYPE_P (tmp ) != IS_ARRAY ) {
742
- php_error_docref ( NULL , E_WARNING , "Wrong ' typemap' option" );
746
+ zend_type_error ( "SoapHeader::__construct(): \" typemap\" option must be of type array, %s given" , zend_zval_type_name ( tmp ) );
743
747
return NULL ;
744
748
}
745
749
ht2 = Z_ARRVAL_P (tmp );
@@ -971,12 +975,14 @@ PHP_METHOD(SoapServer, setPersistence)
971
975
value == SOAP_PERSISTENCE_REQUEST ) {
972
976
service -> soap_class .persistence = value ;
973
977
} else {
974
- php_error_docref (NULL , E_WARNING , "Tried to set persistence with bogus value (" ZEND_LONG_FMT ")" , value );
975
- return ;
978
+ zend_argument_value_error (
979
+ 1 , "must be either SOAP_PERSISTENCE_SESSION or SOAP_PERSISTENCE_REQUEST when the SOAP server is used in class mode"
980
+ );
981
+ RETURN_THROWS ();
976
982
}
977
983
} else {
978
- php_error_docref (NULL , E_WARNING , "Tried to set persistence when you are using you SOAP SERVER in function mode, no persistence needed " );
979
- return ;
984
+ zend_throw_error (NULL , "SoapServer::setPersistence(): Persistence cannot be set when the SOAP server is used in function mode" );
985
+ RETURN_THROWS () ;
980
986
}
981
987
982
988
SOAP_SERVER_END_CODE ();
@@ -993,32 +999,25 @@ PHP_METHOD(SoapServer, setClass)
993
999
int num_args = 0 ;
994
1000
zval * argv = NULL ;
995
1001
996
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "S *" , & classname , & argv , & num_args ) == FAILURE ) {
1002
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "C *" , & ce , & argv , & num_args ) == FAILURE ) {
997
1003
RETURN_THROWS ();
998
1004
}
999
1005
1000
1006
SOAP_SERVER_BEGIN_CODE ();
1001
1007
1002
1008
FETCH_THIS_SERVICE (service );
1003
1009
1004
- ce = zend_lookup_class (classname );
1010
+ service -> type = SOAP_CLASS ;
1011
+ service -> soap_class .ce = ce ;
1005
1012
1006
- if (ce ) {
1007
- service -> type = SOAP_CLASS ;
1008
- service -> soap_class .ce = ce ;
1009
-
1010
- service -> soap_class .persistence = SOAP_PERSISTENCE_REQUEST ;
1011
- service -> soap_class .argc = num_args ;
1012
- if (service -> soap_class .argc > 0 ) {
1013
- int i ;
1014
- service -> soap_class .argv = safe_emalloc (sizeof (zval ), service -> soap_class .argc , 0 );
1015
- for (i = 0 ;i < service -> soap_class .argc ;i ++ ) {
1016
- ZVAL_COPY (& service -> soap_class .argv [i ], & argv [i ]);
1017
- }
1013
+ service -> soap_class .persistence = SOAP_PERSISTENCE_REQUEST ;
1014
+ service -> soap_class .argc = num_args ;
1015
+ if (service -> soap_class .argc > 0 ) {
1016
+ int i ;
1017
+ service -> soap_class .argv = safe_emalloc (sizeof (zval ), service -> soap_class .argc , 0 );
1018
+ for (i = 0 ;i < service -> soap_class .argc ;i ++ ) {
1019
+ ZVAL_COPY (& service -> soap_class .argv [i ], & argv [i ]);
1018
1020
}
1019
- } else {
1020
- php_error_docref (NULL , E_WARNING , "Tried to set a non existent class (%s)" , ZSTR_VAL (classname ));
1021
- return ;
1022
1021
}
1023
1022
1024
1023
SOAP_SERVER_END_CODE ();
@@ -1122,14 +1121,15 @@ PHP_METHOD(SoapServer, addFunction)
1122
1121
zend_function * f ;
1123
1122
1124
1123
if (Z_TYPE_P (tmp_function ) != IS_STRING ) {
1125
- php_error_docref ( NULL , E_WARNING , "Tried to add a function that isn't a string " );
1126
- return ;
1124
+ zend_argument_type_error ( 1 , "must contain only strings " );
1125
+ RETURN_THROWS () ;
1127
1126
}
1128
1127
1129
1128
key = zend_string_tolower (Z_STR_P (tmp_function ));
1130
1129
1131
1130
if ((f = zend_hash_find_ptr (EG (function_table ), key )) == NULL ) {
1132
- php_error_docref (NULL , E_WARNING , "Tried to add a non existent function '%s'" , Z_STRVAL_P (tmp_function ));
1131
+ zend_type_error (NULL , "SoapServer::addFunction(): Function \"%s\" not found" , Z_STRVAL_P (tmp_function ));
1132
+ RETURN_THROWS ();
1133
1133
return ;
1134
1134
}
1135
1135
@@ -1146,8 +1146,8 @@ PHP_METHOD(SoapServer, addFunction)
1146
1146
key = zend_string_tolower (Z_STR_P (function_name ));
1147
1147
1148
1148
if ((f = zend_hash_find_ptr (EG (function_table ), key )) == NULL ) {
1149
- php_error_docref ( NULL , E_WARNING , "Tried to add a non existent function '%s'" , Z_STRVAL_P (function_name ));
1150
- return ;
1149
+ zend_argument_type_error ( 1 , "must be a valid callback, function \"%s\" not found" , Z_STRVAL_P (tmp_function ));
1150
+ RETURN_THROWS () ;
1151
1151
}
1152
1152
if (service -> soap_functions .ft == NULL ) {
1153
1153
service -> soap_functions .functions_all = FALSE;
@@ -1166,8 +1166,8 @@ PHP_METHOD(SoapServer, addFunction)
1166
1166
}
1167
1167
service -> soap_functions .functions_all = TRUE;
1168
1168
} else {
1169
- php_error_docref ( NULL , E_WARNING , "Invalid value passed" );
1170
- return ;
1169
+ zend_argument_value_error ( 1 , "must be SOAP_FUNCTIONS_ALL when an integer is passed" );
1170
+ RETURN_THROWS () ;
1171
1171
}
1172
1172
}
1173
1173
@@ -1217,7 +1217,7 @@ PHP_METHOD(SoapServer, handle)
1217
1217
int old_features ;
1218
1218
zval tmp_soap ;
1219
1219
1220
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "|s" , & arg , & arg_len ) == FAILURE ) {
1220
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "|s! " , & arg , & arg_len ) == FAILURE ) {
1221
1221
RETURN_THROWS ();
1222
1222
}
1223
1223
@@ -1226,7 +1226,7 @@ PHP_METHOD(SoapServer, handle)
1226
1226
FETCH_THIS_SERVICE (service );
1227
1227
SOAP_GLOBAL (soap_version ) = service -> version ;
1228
1228
1229
- if (ZEND_NUM_ARGS () > 0 && ZEND_SIZE_T_INT_OVFL (arg_len )) {
1229
+ if (arg && ZEND_SIZE_T_INT_OVFL (arg_len )) {
1230
1230
soap_server_fault ("Server" , "Input string is too long" , NULL , NULL , NULL );
1231
1231
return ;
1232
1232
}
@@ -1281,7 +1281,7 @@ PHP_METHOD(SoapServer, handle)
1281
1281
php_error_docref (NULL , E_ERROR ,"ob_start failed" );
1282
1282
}
1283
1283
1284
- if (ZEND_NUM_ARGS () == 0 ) {
1284
+ if (! arg ) {
1285
1285
if (SG (request_info ).request_body && 0 == php_stream_rewind (SG (request_info ).request_body )) {
1286
1286
zval * server_vars , * encoding ;
1287
1287
php_stream_filter * zf = NULL ;
@@ -1741,8 +1741,8 @@ PHP_METHOD(SoapServer, addSoapHeader)
1741
1741
FETCH_THIS_SERVICE (service );
1742
1742
1743
1743
if (!service || !service -> soap_headers_ptr ) {
1744
- php_error_docref (NULL , E_WARNING , "The SoapServer::addSoapHeader function may be called only during SOAP request processing" );
1745
- return ;
1744
+ zend_throw_error (NULL , " SoapServer::addSoapHeader() may be called only during SOAP request processing" );
1745
+ RETURN_THROWS () ;
1746
1746
}
1747
1747
1748
1748
p = service -> soap_headers_ptr ;
@@ -2567,9 +2567,9 @@ void soap_client_call_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_soap_call)
2567
2567
zend_hash_next_index_insert (soap_headers , headers );
2568
2568
Z_ADDREF_P (headers );
2569
2569
free_soap_headers = 1 ;
2570
- } else {
2571
- php_error_docref ( NULL , E_WARNING , "Invalid SOAP header" );
2572
- return ;
2570
+ } else {
2571
+ zend_argument_type_error ( 4 , "must be of type SoapHeader|array|null, %s given" , zend_zval_type_name ( headers ) );
2572
+ RETURN_THROWS () ;
2573
2573
}
2574
2574
2575
2575
/* Add default headers */
@@ -2875,8 +2875,9 @@ PHP_METHOD(SoapClient, __setSoapHeaders)
2875
2875
add_next_index_zval (& default_headers , headers );
2876
2876
add_property_zval (this_ptr , "__default_headers" , & default_headers );
2877
2877
Z_DELREF_P (& default_headers );
2878
- } else {
2879
- php_error_docref (NULL , E_WARNING , "Invalid SOAP header" );
2878
+ } else {
2879
+ zend_argument_type_error (1 , "must be of type SoapHeader|array|null, %s given" , zend_zval_type_name (headers ));
2880
+ RETURN_THROWS ();
2880
2881
}
2881
2882
RETURN_TRUE ;
2882
2883
}
0 commit comments