summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2014-03-24 17:14:29 +0800
committerXinchen Hui <laruence@gmail.com>2014-03-24 17:14:29 +0800
commit6965efb2735e4c83cd5d1de55b7483f400c277ff (patch)
tree8e2dd5c9b20c515daa765d35e7e93b06cd12aa02
parentc998bfaf8600bc38dbcd86b84a6469ed06468012 (diff)
downloadphp-git-6965efb2735e4c83cd5d1de55b7483f400c277ff.tar.gz
Fixed segfault due to incompleted refactoring
-rw-r--r--ext/mbstring/mbstring.c9
-rw-r--r--ext/mbstring/tests/mb_internal_encoding.phpt6
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";