From 6965efb2735e4c83cd5d1de55b7483f400c277ff Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Mon, 24 Mar 2014 17:14:29 +0800 Subject: [PATCH] Fixed segfault due to incompleted refactoring --- ext/mbstring/mbstring.c | 9 +++++---- ext/mbstring/tests/mb_internal_encoding.phpt | 6 +++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index f9d51e531e..2ffc31cc0c 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -898,7 +898,7 @@ static const zend_encoding *php_mb_zend_encoding_detector(const unsigned char *a return (const zend_encoding *) mbfl_identify_encoding2(&string, (const mbfl_encoding **)list, list_size, 0); } -static size_t php_mb_zend_encoding_converter(zend_string **to, zend_string *from, const zend_encoding *encoding_to, const zend_encoding *encoding_from TSRMLS_DC) +static size_t php_mb_zend_encoding_converter(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length, const zend_encoding *encoding_to, const zend_encoding *encoding_from TSRMLS_DC) { mbfl_string string, result; mbfl_buffer_converter *convd; @@ -910,8 +910,8 @@ static size_t php_mb_zend_encoding_converter(zend_string **to, zend_string *from mbfl_string_init(&result); string.no_encoding = ((const mbfl_encoding*)encoding_from)->no_encoding; string.no_language = MBSTRG(language); - string.val = (unsigned char*)from->val; - string.len = from->len; + string.val = (unsigned char*)from; + string.len = from_length; /* initialize converter */ convd = mbfl_buffer_converter_new2((const mbfl_encoding *)encoding_from, (const mbfl_encoding *)encoding_to, string.len); @@ -934,7 +934,8 @@ static size_t php_mb_zend_encoding_converter(zend_string **to, zend_string *from return (size_t)-1; } - *to = STR_INIT(result.val, result.len, 0); + *to = result.val; + *to_length = result.len; mbfl_buffer_converter_delete(convd); diff --git a/ext/mbstring/tests/mb_internal_encoding.phpt b/ext/mbstring/tests/mb_internal_encoding.phpt index e1b99c3ba2..acb3c6fbb6 100644 --- a/ext/mbstring/tests/mb_internal_encoding.phpt +++ b/ext/mbstring/tests/mb_internal_encoding.phpt @@ -32,17 +32,17 @@ print "== INVALID PARAMETER ==\n"; // Note: Other than string type, PHP raises Warning $r = mb_internal_encoding('BAD'); -($r === FALSE) ? print "OK_BAD_SET\n" : print "NG_BAD_SET\n"; +($r === false) ? print "OK_BAD_SET\n" : print "NG_BAD_SET\n"; $enc = mb_internal_encoding(); print "$enc\n"; $r = mb_internal_encoding($t_ary); -($r === FALSE) ? print "OK_BAD_ARY_SET\n" : print "NG_BAD_ARY_SET\n"; +($r === NULL) ? print "OK_BAD_ARY_SET\n" : print "NG_BAD_ARY_SET\n"; $enc = mb_internal_encoding(); print "$enc\n"; $r = mb_internal_encoding($t_obj); -($r === FALSE) ? print "OK_BAD_OBJ_SET\n" : print "NG_BAD_OBJ_SET\n"; +($r === NULL) ? print "OK_BAD_OBJ_SET\n" : print "NG_BAD_OBJ_SET\n"; $enc = mb_internal_encoding(); print "$enc\n"; -- 2.40.0