diff options
Diffstat (limited to 'ext/xmlrpc')
| -rw-r--r-- | ext/xmlrpc/config.m4 | 4 | ||||
| -rw-r--r-- | ext/xmlrpc/config.w32 | 1 | ||||
| -rw-r--r-- | ext/xmlrpc/libxmlrpc/base64.c | 3 | ||||
| -rw-r--r-- | ext/xmlrpc/libxmlrpc/encodings.c | 35 | ||||
| -rw-r--r-- | ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/php_xmlrpc.h | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug38431.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug40576.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug40576_64bit.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug42736.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug47818.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug70728.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug70728_64bit.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug71501.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug72155.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug72647.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/tests/bug74975.phpt | 2 | ||||
| -rw-r--r-- | ext/xmlrpc/xmlrpc-epi-php.c | 59 |
18 files changed, 51 insertions, 77 deletions
diff --git a/ext/xmlrpc/config.m4 b/ext/xmlrpc/config.m4 index 32042ba4d8..206924204d 100644 --- a/ext/xmlrpc/config.m4 +++ b/ext/xmlrpc/config.m4 @@ -1,6 +1,4 @@ -dnl -dnl $Id$ -dnl +dnl config.m4 for extension xmlrpc sinclude(ext/xmlrpc/libxmlrpc/acinclude.m4) sinclude(ext/xmlrpc/libxmlrpc/xmlrpc.m4) diff --git a/ext/xmlrpc/config.w32 b/ext/xmlrpc/config.w32 index 99211a5fd0..aeb4b40cab 100644 --- a/ext/xmlrpc/config.w32 +++ b/ext/xmlrpc/config.w32 @@ -1,4 +1,3 @@ -// $Id$ // vim:ft=javascript ARG_WITH("xmlrpc", "XMLRPC-EPI support", "no"); diff --git a/ext/xmlrpc/libxmlrpc/base64.c b/ext/xmlrpc/libxmlrpc/base64.c index a6410145e2..979e46c3f4 100644 --- a/ext/xmlrpc/libxmlrpc/base64.c +++ b/ext/xmlrpc/libxmlrpc/base64.c @@ -57,9 +57,6 @@ void base64_encode_xmlrpc(struct buffer_st *b, const char *source, int length) { int i, hiteof = 0; int offset = 0; - int olen; - - olen = 0; buffer_new(b); diff --git a/ext/xmlrpc/libxmlrpc/encodings.c b/ext/xmlrpc/libxmlrpc/encodings.c index 477077f777..fb75dbb9dc 100644 --- a/ext/xmlrpc/libxmlrpc/encodings.c +++ b/ext/xmlrpc/libxmlrpc/encodings.c @@ -67,26 +67,21 @@ static char* convert(const char* src, int src_len, int *new_len, const char* fro size_t st; outbuf = (char*)emalloc(outlen + 1); - if(outbuf) { - out_ptr = (char*)outbuf; - while(inlenleft) { - st = iconv(ic, (char**)&src, &inlenleft, &out_ptr, &outlenleft); - if(st == -1) { - if(errno == E2BIG) { - int diff = out_ptr - outbuf; - outlen += inlenleft; - outlenleft += inlenleft; - outbuf = (char*)erealloc(outbuf, outlen + 1); - if(!outbuf) { - break; - } - out_ptr = outbuf + diff; - } - else { - efree(outbuf); - outbuf = 0; - break; - } + out_ptr = (char*)outbuf; + while(inlenleft) { + st = iconv(ic, (char**)&src, &inlenleft, &out_ptr, &outlenleft); + if(st == -1) { + if(errno == E2BIG) { + int diff = out_ptr - outbuf; + outlen += inlenleft; + outlenleft += inlenleft; + outbuf = (char*)erealloc(outbuf, outlen + 1); + out_ptr = outbuf + diff; + } + else { + efree(outbuf); + outbuf = 0; + break; } } } diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c b/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c index 727d5636de..212438c10d 100644 --- a/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c +++ b/ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c @@ -589,7 +589,7 @@ int XMLRPC_ServerRegisterIntrospectionCallback(XMLRPC_SERVER server, XMLRPC_Intr } } } - return 0; + return bSuccess; } /*******/ diff --git a/ext/xmlrpc/php_xmlrpc.h b/ext/xmlrpc/php_xmlrpc.h index e0a2225ef7..836fce2dc4 100644 --- a/ext/xmlrpc/php_xmlrpc.h +++ b/ext/xmlrpc/php_xmlrpc.h @@ -51,8 +51,6 @@ +----------------------------------------------------------------------+ */ -/* $Id$ */ - #ifndef _PHP_XMLRPC_H #define _PHP_XMLRPC_H diff --git a/ext/xmlrpc/tests/bug38431.phpt b/ext/xmlrpc/tests/bug38431.phpt index d97ad971ec..2b03378b81 100644 --- a/ext/xmlrpc/tests/bug38431.phpt +++ b/ext/xmlrpc/tests/bug38431.phpt @@ -16,7 +16,7 @@ var_dump(xmlrpc_get_type($var)); echo "Done\n"; ?> ---EXPECTF-- +--EXPECT-- string(5) "array" string(5) "array" string(5) "array" diff --git a/ext/xmlrpc/tests/bug40576.phpt b/ext/xmlrpc/tests/bug40576.phpt index 2d8aecdcea..e8aafc3535 100644 --- a/ext/xmlrpc/tests/bug40576.phpt +++ b/ext/xmlrpc/tests/bug40576.phpt @@ -19,7 +19,7 @@ var_dump(xmlrpc_encode("1.22222222222222222222222")); echo "Done\n"; ?> ---EXPECTF-- +--EXPECT-- string(125) "<?xml version="1.0" encoding="utf-8"?> <params> <param> diff --git a/ext/xmlrpc/tests/bug40576_64bit.phpt b/ext/xmlrpc/tests/bug40576_64bit.phpt index 560fe42231..926980d5b2 100644 --- a/ext/xmlrpc/tests/bug40576_64bit.phpt +++ b/ext/xmlrpc/tests/bug40576_64bit.phpt @@ -19,7 +19,7 @@ var_dump(xmlrpc_encode("1.22222222222222222222222")); echo "Done\n"; ?> ---EXPECTF-- +--EXPECT-- string(125) "<?xml version="1.0" encoding="utf-8"?> <params> <param> diff --git a/ext/xmlrpc/tests/bug42736.phpt b/ext/xmlrpc/tests/bug42736.phpt index a45eb19fca..9ab2818169 100644 --- a/ext/xmlrpc/tests/bug42736.phpt +++ b/ext/xmlrpc/tests/bug42736.phpt @@ -28,7 +28,7 @@ var_dump($response); echo "Done\n"; ?> ---EXPECTF-- +--EXPECT-- string(402) "<?xml version="1.0" encoding="iso-8859-1"?> <methodResponse> <params> diff --git a/ext/xmlrpc/tests/bug47818.phpt b/ext/xmlrpc/tests/bug47818.phpt index a2944d8ec2..a074cd831e 100644 --- a/ext/xmlrpc/tests/bug47818.phpt +++ b/ext/xmlrpc/tests/bug47818.phpt @@ -36,6 +36,6 @@ $method = $x->getMethod(); print "Global scope: $method\n"; ?> ---EXPECTF-- +--EXPECT-- Inside impl(): add Global scope: add diff --git a/ext/xmlrpc/tests/bug70728.phpt b/ext/xmlrpc/tests/bug70728.phpt index 7889b93b4b..0314f1db69 100644 --- a/ext/xmlrpc/tests/bug70728.phpt +++ b/ext/xmlrpc/tests/bug70728.phpt @@ -13,7 +13,7 @@ $obj->scalar = 0x1122334455; var_dump(xmlrpc_encode($obj)); var_dump($obj); ?> ---EXPECTF-- +--EXPECT-- string(135) "<?xml version="1.0" encoding="utf-8"?> <params> <param> diff --git a/ext/xmlrpc/tests/bug70728_64bit.phpt b/ext/xmlrpc/tests/bug70728_64bit.phpt index aa1f0f910e..37a4f6b74b 100644 --- a/ext/xmlrpc/tests/bug70728_64bit.phpt +++ b/ext/xmlrpc/tests/bug70728_64bit.phpt @@ -13,7 +13,7 @@ $obj->scalar = 0x1122334455; var_dump(xmlrpc_encode($obj)); var_dump($obj); ?> ---EXPECTF-- +--EXPECT-- string(135) "<?xml version="1.0" encoding="utf-8"?> <params> <param> diff --git a/ext/xmlrpc/tests/bug71501.phpt b/ext/xmlrpc/tests/bug71501.phpt index 950d21d6d4..5f54186f76 100644 --- a/ext/xmlrpc/tests/bug71501.phpt +++ b/ext/xmlrpc/tests/bug71501.phpt @@ -9,7 +9,7 @@ if (!extension_loaded("xmlrpc")) print "skip"; $params = 'Lê Trung Hiếu'; echo xmlrpc_encode_request('foo', $params, ['encoding' => 'UTF-8', 'escaping' => 'markup']); ?> ---EXPECTF-- +--EXPECT-- <?xml version="1.0" encoding="UTF-8"?> <methodCall> <methodName>foo</methodName> diff --git a/ext/xmlrpc/tests/bug72155.phpt b/ext/xmlrpc/tests/bug72155.phpt index 5a71423dce..40c6c56237 100644 --- a/ext/xmlrpc/tests/bug72155.phpt +++ b/ext/xmlrpc/tests/bug72155.phpt @@ -15,7 +15,7 @@ $var0 = fopen($fl,"r"); $var1 = xmlrpc_encode($var0); var_dump($var1); ?> ---EXPECTF-- +--EXPECT-- string(109) "<?xml version="1.0" encoding="utf-8"?> <params> <param> diff --git a/ext/xmlrpc/tests/bug72647.phpt b/ext/xmlrpc/tests/bug72647.phpt index 9334cbda51..6e80b23cf9 100644 --- a/ext/xmlrpc/tests/bug72647.phpt +++ b/ext/xmlrpc/tests/bug72647.phpt @@ -13,7 +13,7 @@ unset($v); echo xmlrpc_encode($ar); ?> ---EXPECTF-- +--EXPECT-- <?xml version="1.0" encoding="utf-8"?> <params> <param> diff --git a/ext/xmlrpc/tests/bug74975.phpt b/ext/xmlrpc/tests/bug74975.phpt index 1ba7765147..1b3529813f 100644 --- a/ext/xmlrpc/tests/bug74975.phpt +++ b/ext/xmlrpc/tests/bug74975.phpt @@ -32,7 +32,7 @@ echo xmlrpc_encode([ ]); ?> ---EXPECTF-- +--EXPECT-- <?xml version="1.0" encoding="utf-8"?> <params> <param> diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c index 36fbff123c..737a3f84a5 100644 --- a/ext/xmlrpc/xmlrpc-epi-php.c +++ b/ext/xmlrpc/xmlrpc-epi-php.c @@ -51,8 +51,6 @@ +----------------------------------------------------------------------+ */ -/* $Id$ */ - /********************************************************************** * BUGS: * * - when calling a php user function, there appears to be no way to * @@ -141,7 +139,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlrpc_server_register_introspection_callback, 0, ZEND_END_ARG_INFO() /* }}} */ -const zend_function_entry xmlrpc_functions[] = { +static const zend_function_entry xmlrpc_functions[] = { PHP_FE(xmlrpc_encode, arginfo_xmlrpc_encode) PHP_FE(xmlrpc_decode, arginfo_xmlrpc_decode) PHP_FE(xmlrpc_decode_request, arginfo_xmlrpc_decode_request) @@ -279,9 +277,9 @@ static void destroy_server_data(xmlrpc_server_data *server) static void xmlrpc_server_destructor(zend_resource *rsrc) { if (rsrc && rsrc->ptr) { - rsrc->gc.refcount++; + GC_ADDREF(rsrc); destroy_server_data((xmlrpc_server_data*) rsrc->ptr); - rsrc->gc.refcount--; + GC_DELREF(rsrc); } } @@ -298,7 +296,6 @@ PHP_MINFO_FUNCTION(xmlrpc) { php_info_print_table_start(); php_info_print_table_row(2, "core library version", XMLRPC_GetVersionString()); - php_info_print_table_row(2, "php extension version", PHP_XMLRPC_VERSION); php_info_print_table_row(2, "author", "Dan Libby"); php_info_print_table_row(2, "homepage", "http://xmlrpc-epi.sourceforge.net"); php_info_print_table_row(2, "open sourced by", "Epinions.com"); @@ -516,11 +513,9 @@ static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int dep XMLRPC_SetValueID(xReturn, key, 0); } else { if (Z_TYPE(val) != IS_STRING) { - zval newvalue; - ZVAL_DUP(&newvalue, &val); - convert_to_string(&newvalue); - xReturn = XMLRPC_CreateValueBase64(key, Z_STRVAL(newvalue), Z_STRLEN(newvalue)); - zval_dtor(&newvalue); + zend_string *str = zval_get_string_func(&val); + xReturn = XMLRPC_CreateValueBase64(key, ZSTR_VAL(str), ZSTR_LEN(str)); + zend_string_release_ex(str, 0); } else { xReturn = XMLRPC_CreateValueBase64(key, Z_STRVAL(val), Z_STRLEN(val)); } @@ -556,9 +551,12 @@ static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int dep XMLRPC_VECTOR_TYPE vtype; ht = HASH_OF(&val); - if (ht && ht->u.v.nApplyCount > 1) { - zend_throw_error(NULL, "XML-RPC doesn't support circular references"); - return NULL; + if (ht && !(GC_FLAGS(ht) & GC_IMMUTABLE)) { + if (GC_IS_RECURSIVE(ht)) { + zend_throw_error(NULL, "XML-RPC doesn't support circular references"); + return NULL; + } + GC_PROTECT_RECURSION(ht); } ZVAL_COPY(&val_arr, &val); @@ -569,10 +567,6 @@ static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int dep ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL(val_arr), num_index, my_key, pIter) { ZVAL_DEREF(pIter); - ht = HASH_OF(pIter); - if (ht) { - ht->u.v.nApplyCount++; - } if (my_key == NULL) { char *num_str = NULL; @@ -587,10 +581,10 @@ static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int dep } else { XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(ZSTR_VAL(my_key), pIter, depth++)); } - if (ht) { - ht->u.v.nApplyCount--; - } } ZEND_HASH_FOREACH_END(); + if (ht && !(GC_FLAGS(ht) & GC_IMMUTABLE)) { + GC_UNPROTECT_RECURSION(ht); + } zval_ptr_dtor(&val_arr); } break; @@ -959,7 +953,7 @@ static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data) } else { php_error_docref(NULL, E_WARNING, "Invalid callback '%s' passed", ZSTR_VAL(php_function_name)); } - zend_string_release(php_function_name); + zend_string_release_ex(php_function_name, 0); } ZEND_HASH_FOREACH_END(); /* so we don't call the same callbacks ever again */ @@ -990,9 +984,7 @@ PHP_FUNCTION(xmlrpc_server_register_method) if (XMLRPC_ServerRegisterMethod(server->server_ptr, method_key, php_xmlrpc_callback)) { /* save for later use */ - if (Z_REFCOUNTED_P(method_name)) { - Z_ADDREF_P(method_name); - } + Z_TRY_ADDREF_P(method_name); /* register our php method */ add_zval(&server->method_map, method_key, method_name); @@ -1016,9 +1008,7 @@ PHP_FUNCTION(xmlrpc_server_register_introspection_callback) RETURN_FALSE; } - if (Z_REFCOUNTED_P(method_name)) { - Z_ADDREF_P(method_name); - } + Z_TRY_ADDREF_P(method_name); /* register our php method */ add_zval(&server->introspection_map, NULL, method_name); @@ -1042,7 +1032,7 @@ PHP_FUNCTION(xmlrpc_server_call_method) php_output_options out; int argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsz|a", &handle, &rawxml, &rawxml_len, &caller_params, &output_opts) != SUCCESS) { + if (zend_parse_parameters(argc, "rsz|a", &handle, &rawxml, &rawxml_len, &caller_params, &output_opts) != SUCCESS) { return; } /* user output options */ @@ -1304,9 +1294,8 @@ int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE newtype) /* {{{ */ ZVAL_LONG(&ztimestamp, timestamp); convert_to_object(value); - if (zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1, &type)) { - bSuccess = (zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_VALUE_TS_ATTR, sizeof(OBJECT_VALUE_TS_ATTR) - 1, &ztimestamp) != NULL)? SUCCESS : FAILURE; - } + zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1, &type); + bSuccess = (zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_VALUE_TS_ATTR, sizeof(OBJECT_VALUE_TS_ATTR) - 1, &ztimestamp) != NULL)? SUCCESS : FAILURE; } else { zval_ptr_dtor(&type); } @@ -1316,7 +1305,8 @@ int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE newtype) /* {{{ */ } } else { convert_to_object(value); - bSuccess = (zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1, &type) != NULL)? SUCCESS : FAILURE; + zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1, &type); + bSuccess = SUCCESS; } } } @@ -1352,9 +1342,6 @@ XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval* newvalue) /* {{{ */ case IS_DOUBLE: type = xmlrpc_double; break; - case IS_CONSTANT: - type = xmlrpc_string; - break; case IS_STRING: type = xmlrpc_string; break; |
