]> granicus.if.org Git - php/commitdiff
Hook into new unicode conversion error handling API
authorSara Golemon <pollita@php.net>
Fri, 24 Mar 2006 20:21:48 +0000 (20:21 +0000)
committerSara Golemon <pollita@php.net>
Fri, 24 Mar 2006 20:21:48 +0000 (20:21 +0000)
main/streams/filter.c
main/streams/streams.c

index df823cb9cca8f3f5f0c7c5c2f74665564b485d58..f55f3cc9e258c95a99e299b17177d06131b024e2 100644 (file)
@@ -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);
index be39d44270c89cdcd3e285131335665ba8573d66..06aed9469353ece0b2e3e7e068e4c35d21dd161e 100755 (executable)
@@ -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 {