summaryrefslogtreecommitdiff
path: root/ext/xmlrpc
diff options
context:
space:
mode:
authorMark A. Hershberger <mah@debian.(none)>2009-03-25 00:34:59 -0400
committerMark A. Hershberger <mah@debian.(none)>2009-03-25 00:34:59 -0400
commitce7edc9b3c7370f32fec0bc7a8ec3e29ed9a5f61 (patch)
treeacdb9a8816483652a9db1a47db71df5df43707c5 /ext/xmlrpc
parent10f5b47dc7c1cf2b9a00991629f43652710322d3 (diff)
downloadphp-ce7edc9b3c7370f32fec0bc7a8ec3e29ed9a5f61.tar.gz
Imported Upstream version 5.1.1upstream/5.1.1
Diffstat (limited to 'ext/xmlrpc')
-rw-r--r--ext/xmlrpc/config.m465
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_element.c24
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc.c11
-rw-r--r--ext/xmlrpc/php_xmlrpc.h4
-rw-r--r--ext/xmlrpc/xmlrpc-epi-php.c65
5 files changed, 111 insertions, 58 deletions
diff --git a/ext/xmlrpc/config.m4 b/ext/xmlrpc/config.m4
index 5dc99956f..661305442 100644
--- a/ext/xmlrpc/config.m4
+++ b/ext/xmlrpc/config.m4
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.21 2003/10/01 02:53:15 sniper Exp $
+dnl $Id: config.m4,v 1.25.2.2 2005/09/12 17:14:35 sniper Exp $
dnl
sinclude(ext/xmlrpc/libxmlrpc/acinclude.m4)
@@ -8,39 +8,64 @@ sinclude(libxmlrpc/acinclude.m4)
sinclude(libxmlrpc/xmlrpc.m4)
PHP_ARG_WITH(xmlrpc, for XMLRPC-EPI support,
-[ --with-xmlrpc[=DIR] Include XMLRPC-EPI support.])
+[ --with-xmlrpc[=DIR] Include XMLRPC-EPI support])
-PHP_ARG_WITH(expat-dir, libexpat dir for XMLRPC-EPI,
-[ --with-expat-dir=DIR XMLRPC-EPI: libexpat dir for XMLRPC-EPI.],no,no)
+if test -z "$PHP_LIBXML_DIR"; then
+ PHP_ARG_WITH(libxml-dir, libxml2 install dir,
+ [ --with-libxml-dir=DIR XMLRPC-EPI: libxml2 install prefix], no, no)
+fi
+
+PHP_ARG_WITH(libexpat-dir, libexpat dir for XMLRPC-EPI,
+[ --with-libexpat-dir=DIR XMLRPC-EPI: libexpat dir for XMLRPC-EPI (deprecated)],no,no)
PHP_ARG_WITH(iconv-dir, iconv dir for XMLRPC-EPI,
-[ --with-iconv-dir=DIR XMLRPC-EPI: iconv dir for XMLRPC-EPI.],no,no)
+[ --with-iconv-dir=DIR XMLRPC-EPI: iconv dir for XMLRPC-EPI],no,no)
if test "$PHP_XMLRPC" != "no"; then
+ PHP_ADD_EXTENSION_DEP(xmlrpc, libxml)
PHP_SUBST(XMLRPC_SHARED_LIBADD)
AC_DEFINE(HAVE_XMLRPC,1,[ ])
- testval=no
- for i in $PHP_EXPAT_DIR $XMLRPC_DIR /usr/local /usr; do
- if test -f $i/lib/libexpat.a -o -f $i/lib/libexpat.$SHLIB_SUFFIX_NAME; then
- AC_DEFINE(HAVE_LIBEXPAT2,1,[ ])
- PHP_ADD_LIBRARY_WITH_PATH(expat, $i/lib, XMLRPC_SHARED_LIBADD)
- PHP_ADD_INCLUDE($i/include)
- testval=yes
- break
+ dnl
+ dnl Default to libxml2 if --with-libexpat-dir is not used
+ dnl
+ if test "$PHP_LIBEXPAT_DIR" = "no"; then
+
+ if test "$PHP_LIBXML" = "no"; then
+ AC_MSG_ERROR([XML-RPC extension requires LIBXML extension, add --enable-libxml])
fi
- done
- if test "$testval" = "no"; then
- AC_MSG_ERROR(XML-RPC support requires libexpat. Use --with-expat-dir=<DIR>)
+ PHP_SETUP_LIBXML(XMLRPC_SHARED_LIBADD, [
+ if test "$PHP_XML" = "no"; then
+ PHP_ADD_SOURCES(ext/xml, compat.c)
+ PHP_ADD_BUILD_DIR(ext/xml)
+ fi
+ ], [
+ AC_MSG_ERROR([xml2-config not found. Use --with-libxml-dir=<DIR>])
+ ])
+ else
+ testval=no
+ for i in $PHP_LIBEXPAT_DIR $XMLRPC_DIR /usr/local /usr; do
+ if test -f $i/$PHP_LIBDIR/libexpat.a -o -f $i/$PHP_LIBDIR/libexpat.$SHLIB_SUFFIX_NAME; then
+ AC_DEFINE(HAVE_LIBEXPAT,1,[ ])
+ PHP_ADD_LIBRARY_WITH_PATH(expat, $i/$PHP_LIBDIR, XMLRPC_SHARED_LIBADD)
+ PHP_ADD_INCLUDE($i/include)
+ testval=yes
+ break
+ fi
+ done
+
+ if test "$testval" = "no"; then
+ AC_MSG_ERROR([XML-RPC support requires libexpat. Use --with-libexpat-dir=<DIR> (deprecated!)])
+ fi
fi
if test "$PHP_ICONV_DIR" != "no"; then
PHP_ICONV=$PHP_ICONV_DIR
fi
- if test "$PHP_ICONV" = "no"; then
+ if test -z "$PHP_ICONV" || test "$PHP_ICONV" = "no"; then
PHP_ICONV=yes
fi
@@ -49,7 +74,6 @@ if test "$PHP_XMLRPC" != "no"; then
])
fi
-
if test "$PHP_XMLRPC" = "yes"; then
XMLRPC_CHECKS
PHP_NEW_EXTENSION(xmlrpc,xmlrpc-epi-php.c libxmlrpc/base64.c \
@@ -88,6 +112,7 @@ dnl for xmlrpc-epi because of this.
fi
PHP_ADD_INCLUDE($XMLRPC_DIR)
- PHP_ADD_LIBRARY_WITH_PATH(xmlrpc, $XMLRPC_DIR/lib, XMLRPC_SHARED_LIBADD)
+ PHP_ADD_LIBRARY_WITH_PATH(xmlrpc, $XMLRPC_DIR/$PHP_LIBDIR, XMLRPC_SHARED_LIBADD)
+ PHP_NEW_EXTENSION(xmlrpc,xmlrpc-epi-php.c, $ext_shared)
+ XMLRPC_MODULE_TYPE=external
fi
-
diff --git a/ext/xmlrpc/libxmlrpc/xml_element.c b/ext/xmlrpc/libxmlrpc/xml_element.c
index 6a6a49202..073105638 100644
--- a/ext/xmlrpc/libxmlrpc/xml_element.c
+++ b/ext/xmlrpc/libxmlrpc/xml_element.c
@@ -31,7 +31,7 @@
*/
-static const char rcsid[] = "#(@) $Id: xml_element.c,v 1.6.2.1 2005/04/22 11:54:17 jorton Exp $";
+static const char rcsid[] = "#(@) $Id: xml_element.c,v 1.9 2005/04/22 11:06:53 jorton Exp $";
@@ -44,8 +44,14 @@ static const char rcsid[] = "#(@) $Id: xml_element.c,v 1.6.2.1 2005/04/22 11:54:
* 06/2000
* HISTORY
* $Log: xml_element.c,v $
- * Revision 1.6.2.1 2005/04/22 11:54:17 jorton
- * MFH: Fixed bug #32797 (invalid C code in xmlrpc extension).
+ * Revision 1.9 2005/04/22 11:06:53 jorton
+ * Fixed bug #32797 (invalid C code in xmlrpc extension).
+ *
+ * Revision 1.8 2005/03/28 00:07:24 edink
+ * Reshufle includes to make it compile on windows
+ *
+ * Revision 1.7 2005/03/26 03:13:58 sniper
+ * - Made it possible to build ext/xmlrpc with libxml2
*
* Revision 1.6 2004/06/01 20:16:06 iliaa
* Fixed bug #28597 (xmlrpc_encode_request() incorrectly encodes chars in
@@ -104,6 +110,7 @@ static const char rcsid[] = "#(@) $Id: xml_element.c,v 1.6.2.1 2005/04/22 11:54:
* there must be some.
******/
+#include "ext/xml/expat_compat.h"
#ifdef _WIN32
#include "xmlrpc_win32.h"
#endif
@@ -113,7 +120,6 @@ static const char rcsid[] = "#(@) $Id: xml_element.c,v 1.6.2.1 2005/04/22 11:54:
#include "xml_element.h"
#include "queue.h"
-#include "expat.h"
#include "encodings.h"
#define my_free(thing) if(thing) {free(thing); thing = NULL;}
@@ -578,7 +584,7 @@ typedef struct _xml_elem_data {
/* expat start of element handler */
-static void startElement(void *userData, const char *name, const char **attrs)
+static void _xmlrpc_startElement(void *userData, const char *name, const char **attrs)
{
xml_element *c;
xml_elem_data* mydata = (xml_elem_data*)userData;
@@ -606,7 +612,7 @@ static void startElement(void *userData, const char *name, const char **attrs)
}
/* expat end of element handler */
-static void endElement(void *userData, const char *name)
+static void _xmlrpc_endElement(void *userData, const char *name)
{
xml_elem_data* mydata = (xml_elem_data*)userData;
@@ -618,7 +624,7 @@ static void endElement(void *userData, const char *name)
}
/* expat char data handler */
-static void charHandler(void *userData,
+static void _xmlrpc_charHandler(void *userData,
const char *s,
int len)
{
@@ -691,8 +697,8 @@ xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTI
mydata.input_options = options;
mydata.needs_enc_conversion = options->encoding && strcmp(options->encoding, encoding_utf_8);
- XML_SetElementHandler(parser, startElement, endElement);
- XML_SetCharacterDataHandler(parser, charHandler);
+ XML_SetElementHandler(parser, _xmlrpc_startElement, _xmlrpc_endElement);
+ XML_SetCharacterDataHandler(parser, _xmlrpc_charHandler);
/* pass the xml_elem_data struct along */
XML_SetUserData(parser, (void*)&mydata);
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc.c b/ext/xmlrpc/libxmlrpc/xmlrpc.c
index 16a38090b..fa3dafd60 100644
--- a/ext/xmlrpc/libxmlrpc/xmlrpc.c
+++ b/ext/xmlrpc/libxmlrpc/xmlrpc.c
@@ -31,7 +31,7 @@
*/
-static const char rcsid[] = "#(@) $Id: xmlrpc.c,v 1.6 2004/04/27 17:33:59 iliaa Exp $";
+static const char rcsid[] = "#(@) $Id: xmlrpc.c,v 1.8 2005/03/28 00:07:24 edink Exp $";
/****h* ABOUT/xmlrpc
@@ -43,6 +43,12 @@ static const char rcsid[] = "#(@) $Id: xmlrpc.c,v 1.6 2004/04/27 17:33:59 iliaa
* 9/1999 - 10/2000
* HISTORY
* $Log: xmlrpc.c,v $
+ * Revision 1.8 2005/03/28 00:07:24 edink
+ * Reshufle includes to make it compile on windows
+ *
+ * Revision 1.7 2005/03/26 03:13:58 sniper
+ * - Made it possible to build ext/xmlrpc with libxml2
+ *
* Revision 1.6 2004/04/27 17:33:59 iliaa
* Removed C++ style comments.
*
@@ -119,7 +125,7 @@ static const char rcsid[] = "#(@) $Id: xmlrpc.c,v 1.6 2004/04/27 17:33:59 iliaa
* - comprehensive API for manipulation of values
*******/
-
+#include "ext/xml/expat_compat.h"
#ifdef _WIN32
#include "xmlrpc_win32.h"
#endif
@@ -132,7 +138,6 @@ static const char rcsid[] = "#(@) $Id: xmlrpc.c,v 1.6 2004/04/27 17:33:59 iliaa
#include "queue.h"
#include "xmlrpc.h"
-#include "expat.h"
#include "base64.h"
#include "xml_to_xmlrpc.h"
diff --git a/ext/xmlrpc/php_xmlrpc.h b/ext/xmlrpc/php_xmlrpc.h
index c3cee0191..e3c6971b5 100644
--- a/ext/xmlrpc/php_xmlrpc.h
+++ b/ext/xmlrpc/php_xmlrpc.h
@@ -37,7 +37,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
+ | Copyright (c) 1997-2005 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -51,7 +51,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xmlrpc.h,v 1.10 2004/01/08 17:33:00 sniper Exp $ */
+/* $Id: php_xmlrpc.h,v 1.11 2005/08/03 14:08:22 sniper Exp $ */
#ifndef _PHP_XMLRPC_H
#define _PHP_XMLRPC_H
diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c
index befaec836..1665cfd67 100644
--- a/ext/xmlrpc/xmlrpc-epi-php.c
+++ b/ext/xmlrpc/xmlrpc-epi-php.c
@@ -37,7 +37,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2004 The PHP Group |
+ | Copyright (c) 1997-2005 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -51,7 +51,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xmlrpc-epi-php.c,v 1.37 2004/01/08 08:17:47 andi Exp $ */
+/* $Id: xmlrpc-epi-php.c,v 1.39.2.2 2005/10/05 16:40:21 rrichards Exp $ */
/**********************************************************************
* BUGS: *
@@ -478,7 +478,7 @@ static XMLRPC_VECTOR_TYPE determine_vector_type (HashTable *ht)
}
/* recursively convert php values into xmlrpc values */
-static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int depth)
+static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int depth TSRMLS_DC)
{
XMLRPC_VALUE xReturn = NULL;
if(in_val) {
@@ -520,28 +520,41 @@ static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int dep
unsigned long num_index;
zval** pIter;
char* my_key;
+ HashTable *ht = NULL;
+ ht = HASH_OF(val);
+ if (ht && ht->nApplyCount > 1) {
+ php_error_docref(NULL TSRMLS_CC, E_ERROR, "XML-RPC doesn't support circular references");
+ return NULL;
+ }
+
convert_to_array(val);
-
xReturn = XMLRPC_CreateVector(key, determine_vector_type(Z_ARRVAL_P(val)));
zend_hash_internal_pointer_reset(Z_ARRVAL_P(val));
- while(1) {
+ while(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
int res = my_zend_hash_get_current_key(Z_ARRVAL_P(val), &my_key, &num_index);
- if(res == HASH_KEY_IS_LONG) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(0, *pIter, depth++));
- }
- }
- else if(res == HASH_KEY_NON_EXISTANT) {
- break;
- }
- else if(res == HASH_KEY_IS_STRING) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(my_key, *pIter, depth++));
- }
+
+ switch (res) {
+ case HASH_KEY_NON_EXISTANT:
+ break;
+ case HASH_KEY_IS_STRING:
+ case HASH_KEY_IS_LONG:
+ ht = HASH_OF(*pIter);
+ if (ht) {
+ ht->nApplyCount++;
+ }
+ if (res == HASH_KEY_IS_LONG) {
+ XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(0, *pIter, depth++ TSRMLS_CC));
+ }
+ else {
+ XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(my_key, *pIter, depth++ TSRMLS_CC));
+ }
+ if (ht) {
+ ht->nApplyCount--;
+ }
+ break;
}
-
zend_hash_move_forward(Z_ARRVAL_P(val));
}
}
@@ -554,9 +567,9 @@ static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int dep
return xReturn;
}
-static XMLRPC_VALUE PHP_to_XMLRPC(zval* root_val)
+static XMLRPC_VALUE PHP_to_XMLRPC(zval* root_val TSRMLS_DC)
{
- return PHP_to_XMLRPC_worker(NULL, root_val, 0);
+ return PHP_to_XMLRPC_worker(NULL, root_val, 0 TSRMLS_CC);
}
/* recursively convert xmlrpc values into php values */
@@ -656,7 +669,7 @@ PHP_FUNCTION(xmlrpc_encode_request)
XMLRPC_RequestSetRequestType(xRequest, xmlrpc_request_call);
}
if (Z_TYPE_PP(vals) != IS_NULL) {
- XMLRPC_RequestSetData(xRequest, PHP_to_XMLRPC(*vals));
+ XMLRPC_RequestSetData(xRequest, PHP_to_XMLRPC(*vals TSRMLS_CC));
}
outBuf = XMLRPC_REQUEST_ToXML(xRequest, 0);
@@ -667,6 +680,10 @@ PHP_FUNCTION(xmlrpc_encode_request)
XMLRPC_RequestFree(xRequest, 1);
}
}
+
+ if (out.xmlrpc_out.xml_elem_opts.encoding != ENCODING_DEFAULT) {
+ efree(out.xmlrpc_out.xml_elem_opts.encoding);
+ }
}
/* }}} */
@@ -684,7 +701,7 @@ PHP_FUNCTION(xmlrpc_encode)
if( return_value_used ) {
/* convert native php type to xmlrpc type */
- xOut = PHP_to_XMLRPC(*arg1);
+ xOut = PHP_to_XMLRPC(*arg1 TSRMLS_CC);
/* generate raw xml from xmlrpc data */
outBuf = XMLRPC_VALUE_ToXML(xOut, 0);
@@ -1086,7 +1103,7 @@ PHP_FUNCTION(xmlrpc_server_call_method)
FREE_ZVAL(data.return_data);
data.return_data = XMLRPC_to_PHP(xAnswer);
} else if(data.php_executed && !out.b_php_out) {
- xAnswer = PHP_to_XMLRPC(data.return_data);
+ xAnswer = PHP_to_XMLRPC(data.return_data TSRMLS_CC);
}
/* should we return data as xml? */
@@ -1155,7 +1172,7 @@ PHP_FUNCTION(xmlrpc_server_add_introspection_data)
server = zend_list_find(Z_LVAL_PP(handle), &type);
if (type == le_xmlrpc_server) {
- XMLRPC_VALUE xDesc = PHP_to_XMLRPC(*desc);
+ XMLRPC_VALUE xDesc = PHP_to_XMLRPC(*desc TSRMLS_CC);
if (xDesc) {
int retval = XMLRPC_ServerAddIntrospectionData(server->server_ptr, xDesc);
XMLRPC_CleanupValue(xDesc);