pollita Fri Mar 24 20:21:48 2006 UTC Modified files: /php-src/main/streams streams.c filter.c Log: Hook into new unicode conversion error handling API http://cvs.php.net/viewcvs.cgi/php-src/main/streams/streams.c?r1=1.110&r2=1.111&diff_format=u Index: php-src/main/streams/streams.c diff -u php-src/main/streams/streams.c:1.110 php-src/main/streams/streams.c:1.111 --- php-src/main/streams/streams.c:1.110 Fri Mar 24 19:22:24 2006 +++ php-src/main/streams/streams.c Fri Mar 24 20:21:48 2006 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: streams.c,v 1.110 2006/03/24 19:22:24 pollita Exp $ */ +/* $Id: streams.c,v 1.111 2006/03/24 20:21:48 pollita Exp $ */ #define _GNU_SOURCE #include "php.h" @@ -1256,10 +1256,15 @@ if (stream->output_encoding && buf_type == IS_UNICODE) { char *dest; - int destlen; + int destlen, num_conv; UErrorCode status = U_ZERO_ERROR; - zend_convert_from_unicode(stream->output_encoding, &dest, &destlen, buf.u, buflen, &status); + num_conv = zend_convert_from_unicode(stream->output_encoding, &dest, &destlen, buf.u, buflen, &status); + if (U_FAILURE(status)) { + int32_t offset = u_countChar32(buf.u, num_conv)-1; + + zend_raise_conversion_error_ex("Could not convert Unicode string to binary string", stream->output_encoding, offset, (UG(from_u_error_mode) & ZEND_CONV_ERROR_EXCEPTION) TSRMLS_CC); + } freeme = buf.s = dest; buflen = destlen; } else { http://cvs.php.net/viewcvs.cgi/php-src/main/streams/filter.c?r1=1.23&r2=1.24&diff_format=u Index: php-src/main/streams/filter.c diff -u php-src/main/streams/filter.c:1.23 php-src/main/streams/filter.c:1.24 --- php-src/main/streams/filter.c:1.23 Mon Mar 13 04:40:11 2006 +++ php-src/main/streams/filter.c Fri Mar 24 20:21:48 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: filter.c,v 1.23 2006/03/13 04:40:11 pollita Exp $ */ +/* $Id: filter.c,v 1.24 2006/03/24 20:21:48 pollita Exp $ */ #include "php.h" #include "php_globals.h" @@ -706,9 +706,14 @@ } else { UErrorCode status = U_ZERO_ERROR; char *dest; - int destlen; + int destlen, num_conv; + + num_conv = zend_convert_from_unicode(conv, &dest, &destlen, bucket->buf.u, bucket->buflen, &status); + if (U_FAILURE(status)) { + int32_t offset = u_countChar32(bucket->buf.u, num_conv)-1; - zend_convert_from_unicode(conv, &dest, &destlen, bucket->buf.u, bucket->buflen, &status); + zend_raise_conversion_error_ex("Could not convert Unicode string to binary string", conv, offset, (UG(from_u_error_mode) & ZEND_CONV_ERROR_EXCEPTION) TSRMLS_CC); + } if (bucket->own_buf) { pefree(bucket->buf.u, bucket->is_persistent);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php