diff options
| author | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:34:59 -0400 |
|---|---|---|
| committer | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:34:59 -0400 |
| commit | ce7edc9b3c7370f32fec0bc7a8ec3e29ed9a5f61 (patch) | |
| tree | acdb9a8816483652a9db1a47db71df5df43707c5 /ext/xmlrpc | |
| parent | 10f5b47dc7c1cf2b9a00991629f43652710322d3 (diff) | |
| download | php-ce7edc9b3c7370f32fec0bc7a8ec3e29ed9a5f61.tar.gz | |
Imported Upstream version 5.1.1upstream/5.1.1
Diffstat (limited to 'ext/xmlrpc')
| -rw-r--r-- | ext/xmlrpc/config.m4 | 65 | ||||
| -rw-r--r-- | ext/xmlrpc/libxmlrpc/xml_element.c | 24 | ||||
| -rw-r--r-- | ext/xmlrpc/libxmlrpc/xmlrpc.c | 11 | ||||
| -rw-r--r-- | ext/xmlrpc/php_xmlrpc.h | 4 | ||||
| -rw-r--r-- | ext/xmlrpc/xmlrpc-epi-php.c | 65 |
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); |
