tony2001 Tue Oct 2 17:09:22 2007 UTC
Modified files:
/php-src/main/streams unicode_filter.c
Log:
ucnv_toUnicode() in ICU 3.8 requires target buffer size to be even, otherwise
it bails out with U_ILLEGAL_ARGUMENT_ERROR
this commit fixes endless loop (due to the absence of error catching) and
also fixes the cause of the error
http://cvs.php.net/viewvc.cgi/php-src/main/streams/unicode_filter.c?r1=1.6&r2=1.7&diff_format=u
Index: php-src/main/streams/unicode_filter.c
diff -u php-src/main/streams/unicode_filter.c:1.6
php-src/main/streams/unicode_filter.c:1.7
--- php-src/main/streams/unicode_filter.c:1.6 Mon Jan 1 09:29:36 2007
+++ php-src/main/streams/unicode_filter.c Tue Oct 2 17:09:22 2007
@@ -14,7 +14,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: unicode_filter.c,v 1.6 2007/01/01 09:29:36 sebastian Exp $ */
+/* $Id: unicode_filter.c,v 1.7 2007/10/02 17:09:22 tony2001 Exp $ */
#include "php.h"
@@ -144,10 +144,18 @@
UErrorCode errCode = U_ZERO_ERROR;
php_stream_bucket *new_bucket;
+ if ((destlen & 1) != 0) {
+ destlen++;
+ }
+
destp = destbuf = (UChar *)pemalloc(destlen,
data->is_persistent);
ucnv_toUnicode(data->conv, &destp,
(UChar*)((char*)destbuf + destlen), (const char**)&src, src + remaining, NULL,
FALSE, &errCode);
- /* UTODO: Error catching */
+
+ if (errCode != U_ZERO_ERROR) {
+ pefree(destp, data->is_persistent);
+ break;
+ }
new_bucket = php_stream_bucket_new_unicode(stream,
destbuf, destp - destbuf, 1, data->is_persistent TSRMLS_CC);
php_stream_bucket_append(buckets_out, new_bucket
TSRMLS_CC);
@@ -246,7 +254,6 @@
};
/* }}} */
-
/* {{{ unicode.* factory */
static php_stream_filter *php_unicode_filter_create(const char *filtername,
zval *filterparams, int persistent TSRMLS_DC)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php