summaryrefslogtreecommitdiff
path: root/ext/xmlrpc
diff options
context:
space:
mode:
Diffstat (limited to 'ext/xmlrpc')
-rw-r--r--ext/xmlrpc/config.m44
-rw-r--r--ext/xmlrpc/config.w321
-rw-r--r--ext/xmlrpc/libxmlrpc/base64.c3
-rw-r--r--ext/xmlrpc/libxmlrpc/encodings.c35
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c2
-rw-r--r--ext/xmlrpc/php_xmlrpc.h2
-rw-r--r--ext/xmlrpc/tests/bug38431.phpt2
-rw-r--r--ext/xmlrpc/tests/bug40576.phpt2
-rw-r--r--ext/xmlrpc/tests/bug40576_64bit.phpt2
-rw-r--r--ext/xmlrpc/tests/bug42736.phpt2
-rw-r--r--ext/xmlrpc/tests/bug47818.phpt2
-rw-r--r--ext/xmlrpc/tests/bug70728.phpt2
-rw-r--r--ext/xmlrpc/tests/bug70728_64bit.phpt2
-rw-r--r--ext/xmlrpc/tests/bug71501.phpt2
-rw-r--r--ext/xmlrpc/tests/bug72155.phpt2
-rw-r--r--ext/xmlrpc/tests/bug72647.phpt2
-rw-r--r--ext/xmlrpc/tests/bug74975.phpt2
-rw-r--r--ext/xmlrpc/xmlrpc-epi-php.c59
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;