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

Reply via email to