dmitry Wed Sep 5 10:18:24 2007 UTC
Added files: (Branch: PHP_5_2)
/php-src/ext/soap/tests/bugs bug42488.phpt
Modified files:
/php-src NEWS
/php-src/ext/soap php_encoding.c
Log:
Fixed bug #42488 (SoapServer reports an encoding error and the error itself
breaks).
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.928&r2=1.2027.2.547.2.929&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.928 php-src/NEWS:1.2027.2.547.2.929
--- php-src/NEWS:1.2027.2.547.2.928 Wed Sep 5 08:26:31 2007
+++ php-src/NEWS Wed Sep 5 10:18:22 2007
@@ -22,6 +22,8 @@
(Hannes)
- Fixed bug #42468 (Write lock on file_get_contents fails when using a
compression stream). (Ilia)
+- Fixed bug #42488 (SoapServer reports an encoding error and the error itself
+ breaks). (Dmitry)
- Fixed bug #42359 (xsd:list type not parsed). (Dmitry)
- Fixed bug #42326 (SoapServer crash). (Dmitry)
- Fixed bug #42086 (SoapServer return Procedure '' not present for WSIBasic
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_encoding.c?r1=1.103.2.21.2.36&r2=1.103.2.21.2.37&diff_format=u
Index: php-src/ext/soap/php_encoding.c
diff -u php-src/ext/soap/php_encoding.c:1.103.2.21.2.36
php-src/ext/soap/php_encoding.c:1.103.2.21.2.37
--- php-src/ext/soap/php_encoding.c:1.103.2.21.2.36 Fri Aug 31 08:07:27 2007
+++ php-src/ext/soap/php_encoding.c Wed Sep 5 10:18:22 2007
@@ -17,7 +17,7 @@
| Dmitry Stogov <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_encoding.c,v 1.103.2.21.2.36 2007/08/31 08:07:27 dmitry Exp $ */
+/* $Id: php_encoding.c,v 1.103.2.21.2.37 2007/09/05 10:18:22 dmitry Exp $ */
#include <time.h>
@@ -864,13 +864,50 @@
efree(str);
str = estrdup((char*)xmlBufferContent(out));
new_len = n;
- } else if (!php_libxml_xmlCheckUTF8(BAD_CAST(str))) {
- soap_error1(E_ERROR, "Encoding: string '%s' is not a
valid utf-8 string", str);
}
xmlBufferFree(out);
xmlBufferFree(in);
- } else if (!php_libxml_xmlCheckUTF8(BAD_CAST(str))) {
- soap_error1(E_ERROR, "Encoding: string '%s' is not a valid
utf-8 string", str);
+ }
+
+ if (!php_libxml_xmlCheckUTF8(BAD_CAST(str))) {
+ char *err = emalloc(new_len + 8);
+ char c;
+ int i;
+
+ memcpy(err, str, new_len+1);
+ for (i = 0; (c = err[i++]);) {
+ if ((c & 0x80) == 0) {
+ } else if ((c & 0xe0) == 0xc0) {
+ if ((err[i] & 0xc0) != 0x80) {
+ break;
+ }
+ i++;
+ } else if ((c & 0xf0) == 0xe0) {
+ if ((err[i] & 0xc0) != 0x80 || (err[i+1] &
0xc0) != 0x80) {
+ break;
+ }
+ i += 2;
+ } else if ((c & 0xf8) == 0xf0) {
+ if ((err[i] & 0xc0) != 0x80 || (err[i+1] &
0xc0) != 0x80 || (err[i+2] & 0xc0) != 0x80) {
+ break;
+ }
+ i += 3;
+ } else {
+ break;
+ }
+ }
+ if (c) {
+ err[i-1] = '\\';
+ err[i++] = 'x';
+ err[i++] = ((unsigned char)c >> 4) + ((((unsigned
char)c >> 4) > 9) ? ('a' - 10) : '0');
+ err[i++] = (c & 15) + (((c & 15) > 9) ? ('a' - 10) :
'0');
+ err[i++] = '.';
+ err[i++] = '.';
+ err[i++] = '.';
+ err[i++] = 0;
+ }
+
+ soap_error1(E_ERROR, "Encoding: string '%s' is not a valid
utf-8 string", err);
}
text = xmlNewTextLen(BAD_CAST(str), new_len);
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/bugs/bug42488.phpt?view=markup&rev=1.1
Index: php-src/ext/soap/tests/bugs/bug42488.phpt
+++ php-src/ext/soap/tests/bugs/bug42488.phpt
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php