@@ -189,7 +189,7 @@ typedef struct _xmlrpc_callback_data {
189
189
XMLRPC_VALUE_TYPE get_zval_xmlrpc_type (zval * value , zval * * newvalue );
190
190
static void php_xmlrpc_introspection_callback (XMLRPC_SERVER server , void * data );
191
191
int sset_zval_xmlrpc_type (zval * value , XMLRPC_VALUE_TYPE type );
192
- zval * decode_request_worker (zval * xml_in , zval * encoding_in , zval * method_name_out );
192
+ zval * decode_request_worker (char * xml_in , int xml_in_len , char * encoding_in , zval * method_name_out );
193
193
const char * xmlrpc_type_as_str (XMLRPC_VALUE_TYPE type , XMLRPC_VECTOR_TYPE vtype );
194
194
XMLRPC_VALUE_TYPE xmlrpc_str_as_type (const char * str );
195
195
XMLRPC_VECTOR_TYPE xmlrpc_str_as_vector_type (const char * str );
@@ -612,20 +612,20 @@ static zval* XMLRPC_to_PHP(XMLRPC_VALUE el)
612
612
return elem ;
613
613
}
614
614
615
- /* {{{ proto string xmlrpc_encode_request(string method, mixed params)
615
+ /* {{{ proto string xmlrpc_encode_request(string method, mixed params [, array output_options] )
616
616
Generates XML for a method request */
617
617
PHP_FUNCTION (xmlrpc_encode_request )
618
618
{
619
619
XMLRPC_REQUEST xRequest = NULL ;
620
- zval * * method , * * vals , * * out_opts ;
621
- char * outBuf ;
620
+ char * outBuf ;
621
+ zval * * method , * * vals , * out_opts ;
622
622
php_output_options out ;
623
623
624
- if (ZEND_NUM_ARGS () < 2 || ZEND_NUM_ARGS () > 3 || ( zend_get_parameters_ex ( ZEND_NUM_ARGS () , & method , & vals , & out_opts ) == FAILURE ) ) {
625
- WRONG_PARAM_COUNT ; /* prints/logs a warning and returns */
624
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "ZZ|a" , & method , & vals , & out_opts ) == FAILURE ) {
625
+ return ;
626
626
}
627
627
628
- set_output_options (& out , (ZEND_NUM_ARGS () == 3 ) ? * out_opts : 0 );
628
+ set_output_options (& out , (ZEND_NUM_ARGS () == 3 ) ? out_opts : 0 );
629
629
630
630
if (return_value_used ) {
631
631
xRequest = XMLRPC_RequestNew ();
@@ -666,8 +666,8 @@ PHP_FUNCTION(xmlrpc_encode)
666
666
zval * * arg1 ;
667
667
char * outBuf ;
668
668
669
- if (ZEND_NUM_ARGS () != 1 || ( zend_get_parameters_ex ( 1 , & arg1 ) == FAILURE ) ) {
670
- WRONG_PARAM_COUNT ;
669
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "Z" , & arg1 ) == FAILURE ) {
670
+ return ;
671
671
}
672
672
673
673
if ( return_value_used ) {
@@ -690,15 +690,15 @@ PHP_FUNCTION(xmlrpc_encode)
690
690
/* }}} */
691
691
692
692
693
- zval * decode_request_worker ( zval * xml_in , zval * encoding_in , zval * method_name_out )
693
+ zval * decode_request_worker ( char * xml_in , int xml_in_len , char * encoding_in , zval * method_name_out )
694
694
{
695
695
zval * retval = NULL ;
696
696
XMLRPC_REQUEST response ;
697
697
STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS opts = {{0 }};
698
- opts .xml_elem_opts .encoding = encoding_in ? utf8_get_encoding_id_from_string (Z_STRVAL_P ( encoding_in ) ) : ENCODING_DEFAULT ;
698
+ opts .xml_elem_opts .encoding = encoding_in ? utf8_get_encoding_id_from_string (encoding_in ) : ENCODING_DEFAULT ;
699
699
700
700
/* generate XMLRPC_REQUEST from raw xml */
701
- response = XMLRPC_REQUEST_FromXML (Z_STRVAL_P ( xml_in ), Z_STRLEN_P ( xml_in ) , & opts );
701
+ response = XMLRPC_REQUEST_FromXML (xml_in , xml_in_len , & opts );
702
702
if (response ) {
703
703
/* convert xmlrpc data to native php types */
704
704
retval = XMLRPC_to_PHP (XMLRPC_RequestGetData (response ));
@@ -722,21 +722,18 @@ zval* decode_request_worker (zval* xml_in, zval* encoding_in, zval* method_name_
722
722
Decodes XML into native PHP types */
723
723
PHP_FUNCTION (xmlrpc_decode_request )
724
724
{
725
- zval * * xml , * * method , * * encoding = NULL ;
726
- int argc = ZEND_NUM_ARGS ();
725
+ char * xml , * encoding = NULL ;
726
+ zval * * method ;
727
+ int xml_len , encoding_len = 0 ;
727
728
728
- if (argc < 2 || argc > 3 || ( zend_get_parameters_ex ( argc , & xml , & method , & encoding ) == FAILURE ) ) {
729
- WRONG_PARAM_COUNT ;
729
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "sZ|s" , & xml , & xml_len , & method , & encoding , & encoding_len ) == FAILURE ) {
730
+ return ;
730
731
}
731
732
732
- convert_to_string_ex (xml );
733
733
convert_to_string_ex (method );
734
- if (argc == 3 ) {
735
- convert_to_string_ex (encoding );
736
- }
737
734
738
735
if (return_value_used ) {
739
- zval * retval = decode_request_worker (* xml , encoding ? * encoding : NULL , * method );
736
+ zval * retval = decode_request_worker (xml , xml_len , encoding_len ? encoding : NULL , * method );
740
737
if (retval ) {
741
738
* return_value = * retval ;
742
739
FREE_ZVAL (retval );
@@ -750,20 +747,15 @@ PHP_FUNCTION(xmlrpc_decode_request)
750
747
Decodes XML into native PHP types */
751
748
PHP_FUNCTION (xmlrpc_decode )
752
749
{
753
- zval * * arg1 , * * arg2 = NULL ;
754
- int argc = ZEND_NUM_ARGS ();
755
-
756
- if (argc < 1 || argc > 2 || (zend_get_parameters_ex (argc , & arg1 , & arg2 ) == FAILURE )) {
757
- WRONG_PARAM_COUNT ;
758
- }
750
+ char * arg1 , * arg2 = NULL ;
751
+ int arg1_len , arg2_len = 0 ;
759
752
760
- convert_to_string_ex (arg1 );
761
- if (argc == 2 ) {
762
- convert_to_string_ex (arg2 );
753
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "s|s" , & arg1 , & arg1_len , & arg2 , & arg2_len ) == FAILURE ) {
754
+ return ;
763
755
}
764
756
765
757
if (return_value_used ) {
766
- zval * retval = decode_request_worker (* arg1 , arg2 ? * arg2 : NULL , NULL );
758
+ zval * retval = decode_request_worker (arg1 , arg1_len , arg2_len ? arg2 : NULL , NULL );
767
759
if (retval ) {
768
760
* return_value = * retval ;
769
761
FREE_ZVAL (retval );
@@ -811,25 +803,21 @@ PHP_FUNCTION(xmlrpc_server_create)
811
803
Destroys server resources */
812
804
PHP_FUNCTION (xmlrpc_server_destroy )
813
805
{
814
- zval * * arg1 ;
815
- int bSuccess = FAILURE ;
806
+ zval * arg1 ;
807
+ int bSuccess = FAILURE , type ;
816
808
817
- if (ZEND_NUM_ARGS () != 1 || ( zend_get_parameters_ex ( 1 , & arg1 ) == FAILURE ) ) {
818
- WRONG_PARAM_COUNT ;
809
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "r" , & arg1 ) == FAILURE ) {
810
+ return ;
819
811
}
820
812
821
- if (Z_TYPE_PP (arg1 ) == IS_RESOURCE ) {
822
- int type ;
823
-
824
- xmlrpc_server_data * server = zend_list_find (Z_LVAL_PP (arg1 ), & type );
813
+ xmlrpc_server_data * server = zend_list_find (Z_LVAL_P (arg1 ), & type );
825
814
826
- if (server && type == le_xmlrpc_server ) {
827
- bSuccess = zend_list_delete (Z_LVAL_PP (arg1 ));
815
+ if (server && type == le_xmlrpc_server ) {
816
+ bSuccess = zend_list_delete (Z_LVAL_P (arg1 ));
828
817
829
- /* called by hashtable destructor
830
- * destroy_server_data(server);
831
- */
832
- }
818
+ /* called by hashtable destructor
819
+ * destroy_server_data(server);
820
+ */
833
821
}
834
822
RETVAL_LONG (bSuccess == SUCCESS );
835
823
}
@@ -933,28 +921,30 @@ static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data)
933
921
Register a PHP function to handle method matching method_name */
934
922
PHP_FUNCTION (xmlrpc_server_register_method )
935
923
{
936
- zval * * method_key , * * method_name , * * handle , * method_name_save ;
924
+ char * method_key ;
925
+ int method_key_len ;
926
+ zval * handle , * method_name_save , * * method_name ;
937
927
int type ;
938
928
xmlrpc_server_data * server ;
939
929
940
- if (ZEND_NUM_ARGS () != 3 || ( zend_get_parameters_ex ( 3 , & handle , & method_key , & method_name ) == FAILURE ) ) {
941
- WRONG_PARAM_COUNT ;
930
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "rsZ" , & handle , & method_key , & method_key_len , & method_name ) == FAILURE ) {
931
+ return ;
942
932
}
943
933
944
- server = zend_list_find (Z_LVAL_PP (handle ), & type );
934
+ server = zend_list_find (Z_LVAL_P (handle ), & type );
945
935
946
936
if (type == le_xmlrpc_server ) {
947
937
/* register with C engine. every method just calls our standard callback,
948
938
* and it then dispatches to php as necessary
949
939
*/
950
- if (XMLRPC_ServerRegisterMethod (server -> server_ptr , Z_STRVAL_PP ( method_key ) , php_xmlrpc_callback )) {
940
+ if (XMLRPC_ServerRegisterMethod (server -> server_ptr , method_key , php_xmlrpc_callback )) {
951
941
/* save for later use */
952
942
MAKE_STD_ZVAL (method_name_save );
953
943
* method_name_save = * * method_name ;
954
944
zval_copy_ctor (method_name_save );
955
945
956
946
/* register our php method */
957
- add_zval (server -> method_map , Z_STRVAL_PP ( method_key ) , & method_name_save );
947
+ add_zval (server -> method_map , method_key , & method_name_save );
958
948
959
949
RETURN_BOOL (1 );
960
950
}
@@ -968,15 +958,15 @@ PHP_FUNCTION(xmlrpc_server_register_method)
968
958
Register a PHP function to generate documentation */
969
959
PHP_FUNCTION (xmlrpc_server_register_introspection_callback )
970
960
{
971
- zval * * method_name , * * handle , * method_name_save ;
961
+ zval * * method_name , * handle , * method_name_save ;
972
962
int type ;
973
963
xmlrpc_server_data * server ;
974
964
975
- if (ZEND_NUM_ARGS () != 2 || ( zend_get_parameters_ex ( 2 , & handle , & method_name ) == FAILURE ) ) {
976
- WRONG_PARAM_COUNT ;
965
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "rZ" , & handle , & method_name ) == FAILURE ) {
966
+ return ;
977
967
}
978
968
979
- server = zend_list_find (Z_LVAL_PP (handle ), & type );
969
+ server = zend_list_find (Z_LVAL_P (handle ), & type );
980
970
981
971
if (type == le_xmlrpc_server ) {
982
972
/* save for later use */
@@ -1004,30 +994,30 @@ PHP_FUNCTION(xmlrpc_server_call_method)
1004
994
XMLRPC_REQUEST xRequest ;
1005
995
STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS input_opts ;
1006
996
xmlrpc_server_data * server ;
1007
- zval * * rawxml , * * caller_params , * * handle , * * output_opts = NULL ;
1008
- int type ;
997
+ zval * * caller_params , * handle , * * output_opts = NULL ;
998
+ char * rawxml ;
999
+ int rawxml_len , type ;
1009
1000
php_output_options out ;
1010
1001
int argc = ZEND_NUM_ARGS ();
1011
1002
1012
- if (argc < 3 || argc > 4 || ( zend_get_parameters_ex ( argc , & handle , & rawxml , & caller_params , & output_opts ) != SUCCESS ) ) {
1013
- WRONG_PARAM_COUNT ;
1003
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "rsZ|Z" , & handle , & rawxml , & rawxml_len , & caller_params , & output_opts ) != SUCCESS ) {
1004
+ return ;
1014
1005
}
1015
1006
/* user output options */
1016
1007
if (argc == 3 ) {
1017
1008
set_output_options (& out , NULL );
1018
- }
1019
- else {
1009
+ } else {
1020
1010
set_output_options (& out , * output_opts );
1021
1011
}
1022
1012
1023
- server = zend_list_find (Z_LVAL_PP (handle ), & type );
1013
+ server = zend_list_find (Z_LVAL_P (handle ), & type );
1024
1014
1025
1015
if (type == le_xmlrpc_server ) {
1026
1016
/* HACK: use output encoding for now */
1027
1017
input_opts .xml_elem_opts .encoding = utf8_get_encoding_id_from_string (out .xmlrpc_out .xml_elem_opts .encoding );
1028
1018
1029
1019
/* generate an XMLRPC_REQUEST from the raw xml input */
1030
- xRequest = XMLRPC_REQUEST_FromXML (Z_STRVAL_PP ( rawxml ), Z_STRLEN_PP ( rawxml ) , & input_opts );
1020
+ xRequest = XMLRPC_REQUEST_FromXML (rawxml , rawxml_len , & input_opts );
1031
1021
1032
1022
if (xRequest ) {
1033
1023
const char * methodname = XMLRPC_RequestGetMethodName (xRequest );
@@ -1127,18 +1117,18 @@ PHP_FUNCTION(xmlrpc_server_call_method)
1127
1117
Adds introspection documentation */
1128
1118
PHP_FUNCTION (xmlrpc_server_add_introspection_data )
1129
1119
{
1130
- zval * * handle , * * desc ;
1120
+ zval * handle , * desc ;
1131
1121
int type ;
1132
1122
xmlrpc_server_data * server ;
1133
1123
1134
- if (ZEND_NUM_ARGS () != 2 || ( zend_get_parameters_ex ( 2 , & handle , & desc ) == FAILURE ) ) {
1135
- WRONG_PARAM_COUNT ;
1124
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "ra" , & handle , & desc ) == FAILURE ) {
1125
+ return ;
1136
1126
}
1137
1127
1138
- server = zend_list_find (Z_LVAL_PP (handle ), & type );
1128
+ server = zend_list_find (Z_LVAL_P (handle ), & type );
1139
1129
1140
1130
if (type == le_xmlrpc_server ) {
1141
- XMLRPC_VALUE xDesc = PHP_to_XMLRPC (* desc TSRMLS_CC );
1131
+ XMLRPC_VALUE xDesc = PHP_to_XMLRPC (desc TSRMLS_CC );
1142
1132
if (xDesc ) {
1143
1133
int retval = XMLRPC_ServerAddIntrospectionData (server -> server_ptr , xDesc );
1144
1134
XMLRPC_CleanupValue (xDesc );
@@ -1154,17 +1144,17 @@ PHP_FUNCTION(xmlrpc_server_add_introspection_data)
1154
1144
Decodes XML into a list of method descriptions */
1155
1145
PHP_FUNCTION (xmlrpc_parse_method_descriptions )
1156
1146
{
1157
- zval * * arg1 , * retval ;
1147
+ zval * retval ;
1148
+ char * arg1 ;
1149
+ int arg1_len ;
1158
1150
1159
- if (ZEND_NUM_ARGS () != 1 || ( zend_get_parameters_ex ( 1 , & arg1 ) == FAILURE ) ) {
1160
- WRONG_PARAM_COUNT ;
1151
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "s" , & arg1 , & arg1_len ) == FAILURE ) {
1152
+ return ;
1161
1153
}
1162
1154
1163
- convert_to_string_ex (arg1 );
1164
-
1165
1155
if (return_value_used ) {
1166
1156
STRUCT_XMLRPC_ERROR err = {0 };
1167
- XMLRPC_VALUE xVal = XMLRPC_IntrospectionCreateDescription (Z_STRVAL_PP ( arg1 ) , & err );
1157
+ XMLRPC_VALUE xVal = XMLRPC_IntrospectionCreateDescription (arg1 , & err );
1168
1158
if (xVal ) {
1169
1159
retval = XMLRPC_to_PHP (xVal );
1170
1160
@@ -1397,21 +1387,22 @@ XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue)
1397
1387
Sets xmlrpc type, base64 or datetime, for a PHP string value */
1398
1388
PHP_FUNCTION (xmlrpc_set_type )
1399
1389
{
1400
- zval * * arg , * * type ;
1390
+ zval * * arg ;
1391
+ char * type ;
1392
+ int type_len ;
1401
1393
XMLRPC_VALUE_TYPE vtype ;
1402
1394
1403
- if (ZEND_NUM_ARGS () != 2 || ( zend_get_parameters_ex ( 2 , & arg , & type ) == FAILURE ) ) {
1404
- WRONG_PARAM_COUNT ;
1395
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "Zs" , & arg , & type , & type_len ) == FAILURE ) {
1396
+ return ;
1405
1397
}
1406
1398
1407
- convert_to_string_ex (type );
1408
- vtype = xmlrpc_str_as_type (Z_STRVAL_PP (type ));
1399
+ vtype = xmlrpc_str_as_type (type );
1409
1400
if (vtype != xmlrpc_none ) {
1410
1401
if (set_zval_xmlrpc_type (* arg , vtype ) == SUCCESS ) {
1411
1402
RETURN_TRUE ;
1412
1403
}
1413
1404
} else {
1414
- zend_error (E_WARNING ,"invalid type '%s' passed to xmlrpc_set_type()" , Z_STRVAL_PP ( type ) );
1405
+ zend_error (E_WARNING ,"invalid type '%s' passed to xmlrpc_set_type()" , type );
1415
1406
}
1416
1407
RETURN_FALSE ;
1417
1408
}
@@ -1425,8 +1416,8 @@ PHP_FUNCTION(xmlrpc_get_type)
1425
1416
XMLRPC_VALUE_TYPE type ;
1426
1417
XMLRPC_VECTOR_TYPE vtype = xmlrpc_vector_none ;
1427
1418
1428
- if (ZEND_NUM_ARGS () != 1 || ( zend_get_parameters_ex ( 1 , & arg ) == FAILURE ) ) {
1429
- WRONG_PARAM_COUNT ;
1419
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "Z" , & arg ) == FAILURE ) {
1420
+ return ;
1430
1421
}
1431
1422
1432
1423
type = get_zval_xmlrpc_type (* arg , 0 );
@@ -1442,25 +1433,21 @@ PHP_FUNCTION(xmlrpc_get_type)
1442
1433
Determines if an array value represents an XMLRPC fault. */
1443
1434
PHP_FUNCTION (xmlrpc_is_fault )
1444
1435
{
1445
- zval * * arg , * * val ;
1436
+ zval * arg , * * val ;
1446
1437
1447
- if (ZEND_NUM_ARGS () != 1 || ( zend_get_parameters_ex ( 1 , & arg ) == FAILURE ) ) {
1448
- WRONG_PARAM_COUNT ;
1438
+ if (zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "a" , & arg ) == FAILURE ) {
1439
+ return ;
1449
1440
}
1450
1441
1451
- if (Z_TYPE_PP (arg ) != IS_ARRAY ) {
1452
- php_error_docref (NULL TSRMLS_CC , E_NOTICE , "Array argument expected ");
1453
- } else {
1454
- /* The "correct" way to do this would be to call the xmlrpc
1455
- * library XMLRPC_ValueIsFault() func. However, doing that
1456
- * would require us to create an xmlrpc value from the php
1457
- * array, which is rather expensive, especially if it was
1458
- * a big array. Thus, we resort to this not so clever hackery.
1459
- */
1460
- if (zend_hash_find (Z_ARRVAL_PP (arg ), FAULT_CODE , FAULT_CODE_LEN + 1 , (void * * ) & val ) == SUCCESS &&
1461
- zend_hash_find (Z_ARRVAL_PP (arg ), FAULT_STRING , FAULT_STRING_LEN + 1 , (void * * ) & val ) == SUCCESS ) {
1462
- RETURN_TRUE ;
1463
- }
1442
+ /* The "correct" way to do this would be to call the xmlrpc
1443
+ * library XMLRPC_ValueIsFault() func. However, doing that
1444
+ * would require us to create an xmlrpc value from the php
1445
+ * array, which is rather expensive, especially if it was
1446
+ * a big array. Thus, we resort to this not so clever hackery.
1447
+ */
1448
+ if (zend_hash_find (Z_ARRVAL_P (arg ), FAULT_CODE , FAULT_CODE_LEN + 1 , (void * * ) & val ) == SUCCESS &&
1449
+ zend_hash_find (Z_ARRVAL_P (arg ), FAULT_STRING , FAULT_STRING_LEN + 1 , (void * * ) & val ) == SUCCESS ) {
1450
+ RETURN_TRUE ;
1464
1451
}
1465
1452
1466
1453
RETURN_FALSE ;
0 commit comments