From: Sara Golemon Date: Fri, 24 Mar 2006 20:21:48 +0000 (+0000) Subject: Hook into new unicode conversion error handling API X-Git-Tag: RELEASE_1_3~272 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0260dfc9b1467bdfeadf72ea5e29a2a4dcf4ce3a;p=php Hook into new unicode conversion error handling API --- diff --git a/main/streams/filter.c b/main/streams/filter.c index df823cb9cc..f55f3cc9e2 100644 --- a/main/streams/filter.c +++ b/main/streams/filter.c @@ -706,9 +706,14 @@ PHPAPI int _php_stream_bucket_convert(php_stream_bucket *bucket, unsigned char t } 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); diff --git a/main/streams/streams.c b/main/streams/streams.c index be39d44270..06aed94693 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -1256,10 +1256,15 @@ static size_t _php_stream_write_buffer(php_stream *stream, int buf_type, zstr bu 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 {