iliaa Wed Jul 27 10:52:53 2005 EDT Modified files: /php-src/ext/soap php_encoding.c /php-src NEWS /php-src/ext/soap/tests/interop/Round2/Base r2_base_017p.phpt r2_base_017s.phpt r2_base_017w.phpt /php-src/ext/soap/tests/interop/Round4/GroupI r4_groupI_xsd_006w.phpt Log: Fixed bug #32139 (SOAP client does not auto-handle base64 encoding).
http://cvs.php.net/diff.php/php-src/ext/soap/php_encoding.c?r1=1.100&r2=1.101&ty=u Index: php-src/ext/soap/php_encoding.c diff -u php-src/ext/soap/php_encoding.c:1.100 php-src/ext/soap/php_encoding.c:1.101 --- php-src/ext/soap/php_encoding.c:1.100 Fri Jul 8 03:16:56 2005 +++ php-src/ext/soap/php_encoding.c Wed Jul 27 10:52:42 2005 @@ -17,12 +17,13 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_encoding.c,v 1.100 2005/07/08 07:16:56 dmitry Exp $ */ +/* $Id: php_encoding.c,v 1.101 2005/07/27 14:52:42 iliaa Exp $ */ #include <time.h> #include "php_soap.h" #include "ext/libxml/php_libxml.h" +#include "ext/standard/base64.h" #include <libxml/parserInternals.h> #include "zend_strtod.h" @@ -607,9 +608,26 @@ if (data && data->children) { if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) { whiteSpace_collapse(data->children->content); - ZVAL_STRING(ret, data->children->content, 1); + + if (type->type_str && !strcmp(type->type_str, "base64Binary")) { + unsigned char *str; + int str_len; + + str = php_base64_decode(data->children->content, strlen(data->children->content), &str_len); + ZVAL_STRINGL(ret, str, str_len, 0); + } else { + ZVAL_STRING(ret, data->children->content, 1); + } } else if (data->children->type == XML_CDATA_SECTION_NODE && data->children->next == NULL) { - ZVAL_STRING(ret, data->children->content, 1); + if (type->type_str && !strcmp(type->type_str, "base64Binary")) { + unsigned char *str; + int str_len; + + str = php_base64_decode(data->children->content, strlen(data->children->content), &str_len); + ZVAL_STRINGL(ret, str, str_len, 0); + } else { + ZVAL_STRING(ret, data->children->content, 1); + } } else { soap_error0(E_ERROR, "Encoding: Violation of encoding rules"); } @@ -637,7 +655,7 @@ zval_copy_ctor(&tmp); convert_to_string(&tmp); - str = php_escape_html_entities(Z_STRVAL(tmp), Z_STRLEN(tmp), &new_len, 0, 0, NULL TSRMLS_CC); + str = php_escape_html_entities(Z_STRVAL(tmp), Z_STRLEN(tmp), &new_len, 0, 0, NULL TSRMLS_CC); zval_dtor(&tmp); } @@ -671,19 +689,38 @@ static xmlNodePtr to_xml_stringl(encodeTypePtr type, zval *data, int style, xmlNodePtr parent) { xmlNodePtr ret; + zend_bool benc = type->type_str && !strcmp(type->type_str, "base64Binary"); ret = xmlNewNode(NULL,"BOGUS"); xmlAddChild(parent, ret); FIND_ZVAL_NULL(data, ret, style); if (Z_TYPE_P(data) == IS_STRING) { - xmlNodeSetContentLen(ret, Z_STRVAL_P(data), Z_STRLEN_P(data)); + if (!benc) { + xmlNodeSetContentLen(ret, Z_STRVAL_P(data), Z_STRLEN_P(data)); + } else { + char *str; + int str_len; + + str = php_base64_encode(Z_STRVAL_P(data), Z_STRLEN_P(data), &str_len); + xmlNodeSetContentLen(ret, str, str_len); + efree(str); + } } else { zval tmp = *data; zval_copy_ctor(&tmp); convert_to_string(&tmp); - xmlNodeSetContentLen(ret, Z_STRVAL(tmp), Z_STRLEN(tmp)); + if (!benc) { + xmlNodeSetContentLen(ret, Z_STRVAL(tmp), Z_STRLEN(tmp)); + } else { + char *str; + int str_len; + + str = php_base64_encode(Z_STRVAL(tmp), Z_STRLEN(tmp), &str_len); + xmlNodeSetContentLen(ret, str, str_len); + efree(str); + } zval_dtor(&tmp); } http://cvs.php.net/diff.php/php-src/NEWS?r1=1.2008&r2=1.2009&ty=u Index: php-src/NEWS diff -u php-src/NEWS:1.2008 php-src/NEWS:1.2009 --- php-src/NEWS:1.2008 Tue Jul 26 18:29:26 2005 +++ php-src/NEWS Wed Jul 27 10:52:44 2005 @@ -10,6 +10,7 @@ - Fixed bug #33578 (strtotime() problem with "Oct17" format). (Derick) - Fixed bug #33558 (warning with nested calls to functions returning by reference). (Dmitry) +- Fixed bug #32139 (SOAP client does not auto-handle base64 encoding). (Ilia) 14 Jul 2005, PHP 5.1 Beta 3 - Upgraded bundled SQLite library for PDO:SQLite to 3.2.2 (Ilia) http://cvs.php.net/diff.php/php-src/ext/soap/tests/interop/Round2/Base/r2_base_017p.phpt?r1=1.1&r2=1.2&ty=u Index: php-src/ext/soap/tests/interop/Round2/Base/r2_base_017p.phpt diff -u php-src/ext/soap/tests/interop/Round2/Base/r2_base_017p.phpt:1.1 php-src/ext/soap/tests/interop/Round2/Base/r2_base_017p.phpt:1.2 --- php-src/ext/soap/tests/interop/Round2/Base/r2_base_017p.phpt:1.1 Sun Apr 3 11:51:19 2005 +++ php-src/ext/soap/tests/interop/Round2/Base/r2_base_017p.phpt Wed Jul 27 10:52:51 2005 @@ -5,7 +5,7 @@ --FILE-- <?php $client = new SoapClient(NULL,array("location"=>"test://","uri"=>"http://soapinterop.org/","trace"=>1,"exceptions"=>0)); -$client->__soapCall("echoBase64", array('TmVicmFza2E='), array("soapaction"=>"http://soapinterop.org/","uri"=>"http://soapinterop.org/")); +$client->__soapCall("echoBase64", array('Nebraska'), array("soapaction"=>"http://soapinterop.org/","uri"=>"http://soapinterop.org/")); echo $client->__getlastrequest(); $HTTP_RAW_POST_DATA = $client->__getlastrequest(); include("round2_base.inc"); @@ -13,7 +13,7 @@ ?> --EXPECT-- <?xml version="1.0" encoding="UTF-8"?> -<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://soapinterop.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoBase64><param0 xsi:type="xsd:string">TmVicmFza2E=</param0></ns1:echoBase64></SOAP-ENV:Body></SOAP-ENV:Envelope> +<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://soapinterop.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoBase64><param0 xsi:type="xsd:string">Nebraska</param0></ns1:echoBase64></SOAP-ENV:Body></SOAP-ENV:Envelope> <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://soapinterop.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoBase64Response><outputBase64 xsi:type="xsd:base64Binary">TmVicmFza2E=</outputBase64></ns1:echoBase64Response></SOAP-ENV:Body></SOAP-ENV:Envelope> ok http://cvs.php.net/diff.php/php-src/ext/soap/tests/interop/Round2/Base/r2_base_017s.phpt?r1=1.1&r2=1.2&ty=u Index: php-src/ext/soap/tests/interop/Round2/Base/r2_base_017s.phpt diff -u php-src/ext/soap/tests/interop/Round2/Base/r2_base_017s.phpt:1.1 php-src/ext/soap/tests/interop/Round2/Base/r2_base_017s.phpt:1.2 --- php-src/ext/soap/tests/interop/Round2/Base/r2_base_017s.phpt:1.1 Sun Apr 3 11:51:19 2005 +++ php-src/ext/soap/tests/interop/Round2/Base/r2_base_017s.phpt Wed Jul 27 10:52:51 2005 @@ -5,7 +5,7 @@ --FILE-- <?php $client = new SoapClient(NULL,array("location"=>"test://","uri"=>"http://soapinterop.org/","trace"=>1,"exceptions"=>0)); -$client->__soapCall("echoBase64", array(new SoapParam(new SoapVar('TmVicmFza2E=',XSD_BASE64BINARY),"inputBase64")), array("soapaction"=>"http://soapinterop.org/","uri"=>"http://soapinterop.org/")); +$client->__soapCall("echoBase64", array(new SoapParam(new SoapVar('Nebraska',XSD_BASE64BINARY),"inputBase64")), array("soapaction"=>"http://soapinterop.org/","uri"=>"http://soapinterop.org/")); echo $client->__getlastrequest(); $HTTP_RAW_POST_DATA = $client->__getlastrequest(); include("round2_base.inc"); http://cvs.php.net/diff.php/php-src/ext/soap/tests/interop/Round2/Base/r2_base_017w.phpt?r1=1.1&r2=1.2&ty=u Index: php-src/ext/soap/tests/interop/Round2/Base/r2_base_017w.phpt diff -u php-src/ext/soap/tests/interop/Round2/Base/r2_base_017w.phpt:1.1 php-src/ext/soap/tests/interop/Round2/Base/r2_base_017w.phpt:1.2 --- php-src/ext/soap/tests/interop/Round2/Base/r2_base_017w.phpt:1.1 Sun Apr 3 11:51:19 2005 +++ php-src/ext/soap/tests/interop/Round2/Base/r2_base_017w.phpt Wed Jul 27 10:52:51 2005 @@ -5,7 +5,7 @@ --FILE-- <?php $client = new SoapClient(dirname(__FILE__)."/round2_base.wsdl",array("trace"=>1,"exceptions"=>0)); -$client->echoBase64('TmVicmFza2E='); +$client->echoBase64('Nebraska'); echo $client->__getlastrequest(); $HTTP_RAW_POST_DATA = $client->__getlastrequest(); include("round2_base.inc"); http://cvs.php.net/diff.php/php-src/ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_006w.phpt?r1=1.1&r2=1.2&ty=u Index: php-src/ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_006w.phpt
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php