Merge branch 'master' into preload

* master:
  [ci skip] Update NEWS
  [ci skip] Update NEWS
  [ci skip] Update NEWS
  fix bug #77079
  Add missing null initialization
  Remove redundant mbfl_string_init calls
  Use zend_string for mbstring last encoding cache
This commit is contained in:
Dmitry Stogov 2018-10-30 10:29:49 +03:00
commit 562049510f
3 changed files with 98 additions and 156 deletions

View file

@ -683,24 +683,25 @@ static const sapi_post_entry mbstr_post_entries[] = {
}; };
/* }}} */ /* }}} */
static const mbfl_encoding *php_mb_get_encoding(const char *encoding_name) { static const mbfl_encoding *php_mb_get_encoding(zend_string *encoding_name) {
if (encoding_name) { if (encoding_name) {
const mbfl_encoding *encoding; const mbfl_encoding *encoding;
if (MBSTRG(last_used_encoding_name) zend_string *last_encoding_name = MBSTRG(last_used_encoding_name);
&& !strcasecmp(encoding_name, MBSTRG(last_used_encoding_name))) { if (last_encoding_name && (last_encoding_name == encoding_name
|| !strcasecmp(ZSTR_VAL(encoding_name), ZSTR_VAL(last_encoding_name)))) {
return MBSTRG(last_used_encoding); return MBSTRG(last_used_encoding);
} }
encoding = mbfl_name2encoding(encoding_name); encoding = mbfl_name2encoding(ZSTR_VAL(encoding_name));
if (!encoding) { if (!encoding) {
php_error_docref(NULL, E_WARNING, "Unknown encoding \"%s\"", encoding_name); php_error_docref(NULL, E_WARNING, "Unknown encoding \"%s\"", ZSTR_VAL(encoding_name));
return NULL; return NULL;
} }
if (MBSTRG(last_used_encoding_name)) { if (last_encoding_name) {
efree(MBSTRG(last_used_encoding_name)); zend_string_release(last_encoding_name);
} }
MBSTRG(last_used_encoding_name) = estrdup(encoding_name); MBSTRG(last_used_encoding_name) = zend_string_copy(encoding_name);
MBSTRG(last_used_encoding) = encoding; MBSTRG(last_used_encoding) = encoding;
return encoding; return encoding;
} else { } else {
@ -932,8 +933,6 @@ static size_t php_mb_zend_encoding_converter(unsigned char **to, size_t *to_leng
/* new encoding */ /* new encoding */
/* initialize string */ /* initialize string */
mbfl_string_init(&string);
mbfl_string_init(&result);
string.encoding = (const mbfl_encoding*)encoding_from; string.encoding = (const mbfl_encoding*)encoding_from;
string.no_language = MBSTRG(language); string.no_language = MBSTRG(language);
string.val = (unsigned char*)from; string.val = (unsigned char*)from;
@ -956,6 +955,7 @@ static size_t php_mb_zend_encoding_converter(unsigned char **to, size_t *to_leng
} }
mbfl_buffer_converter_flush(convd); mbfl_buffer_converter_flush(convd);
mbfl_string_init(&result);
if (!mbfl_buffer_converter_result(convd, &result)) { if (!mbfl_buffer_converter_result(convd, &result)) {
mbfl_buffer_converter_delete(convd); mbfl_buffer_converter_delete(convd);
return (size_t)-1; return (size_t)-1;
@ -1732,7 +1732,7 @@ PHP_RSHUTDOWN_FUNCTION(mbstring)
MBSTRG(http_input_identify_string) = NULL; MBSTRG(http_input_identify_string) = NULL;
if (MBSTRG(last_used_encoding_name)) { if (MBSTRG(last_used_encoding_name)) {
efree(MBSTRG(last_used_encoding_name)); zend_string_release(MBSTRG(last_used_encoding_name));
MBSTRG(last_used_encoding_name) = NULL; MBSTRG(last_used_encoding_name) = NULL;
} }
@ -2288,15 +2288,14 @@ PHP_FUNCTION(mb_strlen)
{ {
size_t n; size_t n;
mbfl_string string; mbfl_string string;
char *str, *enc_name = NULL; char *str;
size_t str_len, enc_name_len; size_t str_len;
zend_string *enc_name = NULL;
mbfl_string_init(&string);
ZEND_PARSE_PARAMETERS_START(1, 2) ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_STRING(str, str_len) Z_PARAM_STRING(str, str_len)
Z_PARAM_OPTIONAL Z_PARAM_OPTIONAL
Z_PARAM_STRING(enc_name, enc_name_len) Z_PARAM_STR(enc_name)
ZEND_PARSE_PARAMETERS_END(); ZEND_PARSE_PARAMETERS_END();
string.val = (unsigned char *) str; string.val = (unsigned char *) str;
@ -2323,13 +2322,10 @@ PHP_FUNCTION(mb_strpos)
int reverse = 0; int reverse = 0;
zend_long offset = 0; zend_long offset = 0;
mbfl_string haystack, needle; mbfl_string haystack, needle;
char *enc_name = NULL; zend_string *enc_name = NULL;
size_t enc_name_len, n; size_t n;
mbfl_string_init(&haystack); if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|lS", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &enc_name) == FAILURE) {
mbfl_string_init(&needle);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|ls", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &enc_name, &enc_name_len) == FAILURE) {
return; return;
} }
@ -2385,54 +2381,36 @@ PHP_FUNCTION(mb_strpos)
PHP_FUNCTION(mb_strrpos) PHP_FUNCTION(mb_strrpos)
{ {
mbfl_string haystack, needle; mbfl_string haystack, needle;
char *enc_name = NULL; zend_string *enc_name = NULL;
size_t enc_name_len;
zval *zoffset = NULL; zval *zoffset = NULL;
zend_long offset = 0, str_flg, n; zend_long offset = 0, n;
char *enc_name2 = NULL;
size_t enc_name_len2;
mbfl_string_init(&haystack); if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|zS", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &zoffset, &enc_name) == FAILURE) {
mbfl_string_init(&needle);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|zs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &zoffset, &enc_name, &enc_name_len) == FAILURE) {
return; return;
} }
if (zoffset) { if (zoffset) {
if (Z_TYPE_P(zoffset) == IS_STRING) { if (Z_TYPE_P(zoffset) == IS_STRING) {
enc_name2 = Z_STRVAL_P(zoffset); switch (Z_STRVAL_P(zoffset)[0]) {
enc_name_len2 = Z_STRLEN_P(zoffset); case '0':
str_flg = 1; case '1':
case '2':
if (enc_name2 != NULL) { case '3':
switch (*enc_name2) { case '4':
case '0': case '5':
case '1': case '6':
case '2': case '7':
case '3': case '8':
case '4': case '9':
case '5': case ' ':
case '6': case '-':
case '7': case '.':
case '8': convert_to_long_ex(zoffset);
case '9': offset = Z_LVAL_P(zoffset);
case ' ': break;
case '-': default :
case '.': enc_name = Z_STR_P(zoffset);
break; break;
default :
str_flg = 0;
break;
}
}
if (str_flg) {
convert_to_long_ex(zoffset);
offset = Z_LVAL_P(zoffset);
} else {
enc_name = enc_name2;
enc_name_len = enc_name_len2;
} }
} else { } else {
convert_to_long_ex(zoffset); convert_to_long_ex(zoffset);
@ -2471,10 +2449,9 @@ PHP_FUNCTION(mb_stripos)
size_t n = (size_t) -1; size_t n = (size_t) -1;
zend_long offset = 0; zend_long offset = 0;
mbfl_string haystack, needle; mbfl_string haystack, needle;
const char *from_encoding = MBSTRG(current_internal_encoding)->mime_name; zend_string *from_encoding = NULL;
size_t from_encoding_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|ls", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &from_encoding, &from_encoding_len) == FAILURE) { if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|lS", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &from_encoding) == FAILURE) {
return; return;
} }
@ -2500,10 +2477,10 @@ PHP_FUNCTION(mb_strripos)
size_t n = (size_t) -1; size_t n = (size_t) -1;
zend_long offset = 0; zend_long offset = 0;
mbfl_string haystack, needle; mbfl_string haystack, needle;
const char *from_encoding = MBSTRG(current_internal_encoding)->mime_name; zend_string *from_encoding = NULL;
size_t from_encoding_len; size_t from_encoding_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|ls", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &from_encoding, &from_encoding_len) == FAILURE) { if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|lS", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &from_encoding) == FAILURE) {
return; return;
} }
@ -2523,14 +2500,10 @@ PHP_FUNCTION(mb_strstr)
{ {
size_t n; size_t n;
mbfl_string haystack, needle, result, *ret = NULL; mbfl_string haystack, needle, result, *ret = NULL;
char *enc_name = NULL; zend_string *enc_name = NULL;
size_t enc_name_len;
zend_bool part = 0; zend_bool part = 0;
mbfl_string_init(&haystack); if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|bS", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &enc_name) == FAILURE) {
mbfl_string_init(&needle);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &enc_name, &enc_name_len) == FAILURE) {
return; return;
} }
@ -2578,14 +2551,10 @@ PHP_FUNCTION(mb_strrchr)
{ {
size_t n; size_t n;
mbfl_string haystack, needle, result, *ret = NULL; mbfl_string haystack, needle, result, *ret = NULL;
char *enc_name = NULL; zend_string *enc_name = NULL;
size_t enc_name_len;
zend_bool part = 0; zend_bool part = 0;
mbfl_string_init(&haystack); if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|bS", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &enc_name) == FAILURE) {
mbfl_string_init(&needle);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &enc_name, &enc_name_len) == FAILURE) {
return; return;
} }
@ -2636,11 +2605,9 @@ PHP_FUNCTION(mb_stristr)
zend_bool part = 0; zend_bool part = 0;
size_t from_encoding_len, n; size_t from_encoding_len, n;
mbfl_string haystack, needle, result, *ret = NULL; mbfl_string haystack, needle, result, *ret = NULL;
const char *from_encoding = NULL; zend_string *from_encoding = NULL;
mbfl_string_init(&haystack);
mbfl_string_init(&needle);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &from_encoding, &from_encoding_len) == FAILURE) { if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|bS", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &from_encoding) == FAILURE) {
return; return;
} }
@ -2688,13 +2655,10 @@ PHP_FUNCTION(mb_strrichr)
{ {
zend_bool part = 0; zend_bool part = 0;
size_t n; size_t n;
size_t from_encoding_len;
mbfl_string haystack, needle, result, *ret = NULL; mbfl_string haystack, needle, result, *ret = NULL;
const char *from_encoding = NULL; zend_string *from_encoding = NULL;
mbfl_string_init(&haystack);
mbfl_string_init(&needle);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &from_encoding, &from_encoding_len) == FAILURE) { if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|bS", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &from_encoding) == FAILURE) {
return; return;
} }
@ -2737,13 +2701,9 @@ PHP_FUNCTION(mb_substr_count)
{ {
size_t n; size_t n;
mbfl_string haystack, needle; mbfl_string haystack, needle;
char *enc_name = NULL; zend_string *enc_name = NULL;
size_t enc_name_len;
mbfl_string_init(&haystack); if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|S", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &enc_name) == FAILURE) {
mbfl_string_init(&needle);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|s", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &enc_name, &enc_name_len) == FAILURE) {
return; return;
} }
@ -2771,18 +2731,18 @@ PHP_FUNCTION(mb_substr_count)
Returns part of a string */ Returns part of a string */
PHP_FUNCTION(mb_substr) PHP_FUNCTION(mb_substr)
{ {
char *str, *encoding = NULL; char *str;
zend_string *encoding = NULL;
zend_long from, len; zend_long from, len;
size_t mblen, real_from, real_len; size_t mblen, real_from, real_len;
size_t str_len, encoding_len; size_t str_len;
zend_bool len_is_null = 1; zend_bool len_is_null = 1;
mbfl_string string, result, *ret; mbfl_string string, result, *ret;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l!s", &str, &str_len, &from, &len, &len_is_null, &encoding, &encoding_len) == FAILURE) { if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l!S", &str, &str_len, &from, &len, &len_is_null, &encoding) == FAILURE) {
return; return;
} }
mbfl_string_init(&string);
string.no_language = MBSTRG(language); string.no_language = MBSTRG(language);
string.encoding = php_mb_get_encoding(encoding); string.encoding = php_mb_get_encoding(encoding);
if (!string.encoding) { if (!string.encoding) {
@ -2842,15 +2802,12 @@ PHP_FUNCTION(mb_substr)
Returns part of a string */ Returns part of a string */
PHP_FUNCTION(mb_strcut) PHP_FUNCTION(mb_strcut)
{ {
char *encoding = NULL; zend_string *encoding = NULL;
zend_long from, len; zend_long from, len;
size_t encoding_len;
zend_bool len_is_null = 1; zend_bool len_is_null = 1;
mbfl_string string, result, *ret; mbfl_string string, result, *ret;
mbfl_string_init(&string); if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l!S", (char **)&string.val, &string.len, &from, &len, &len_is_null, &encoding) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l!s", (char **)&string.val, &string.len, &from, &len, &len_is_null, &encoding, &encoding_len) == FAILURE) {
return; return;
} }
@ -2905,12 +2862,9 @@ PHP_FUNCTION(mb_strwidth)
{ {
size_t n; size_t n;
mbfl_string string; mbfl_string string;
char *enc_name = NULL; zend_string *enc_name = NULL;
size_t enc_name_len;
mbfl_string_init(&string); if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|S", (char **)&string.val, &string.len, &enc_name) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s", (char **)&string.val, &string.len, &enc_name, &enc_name_len) == FAILURE) {
return; return;
} }
@ -2933,18 +2887,16 @@ PHP_FUNCTION(mb_strwidth)
Trim the string in terminal width */ Trim the string in terminal width */
PHP_FUNCTION(mb_strimwidth) PHP_FUNCTION(mb_strimwidth)
{ {
char *str, *trimmarker = NULL, *encoding = NULL; char *str, *trimmarker = NULL;
zend_string *encoding = NULL;
zend_long from, width, swidth; zend_long from, width, swidth;
size_t str_len, trimmarker_len, encoding_len; size_t str_len, trimmarker_len;
mbfl_string string, result, marker, *ret; mbfl_string string, result, marker, *ret;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sll|ss", &str, &str_len, &from, &width, &trimmarker, &trimmarker_len, &encoding, &encoding_len) == FAILURE) { if (zend_parse_parameters(ZEND_NUM_ARGS(), "sll|sS", &str, &str_len, &from, &width, &trimmarker, &trimmarker_len, &encoding) == FAILURE) {
return; return;
} }
mbfl_string_init(&string);
mbfl_string_init(&marker);
string.no_language = marker.no_language = MBSTRG(language); string.no_language = marker.no_language = MBSTRG(language);
string.encoding = marker.encoding = php_mb_get_encoding(encoding); string.encoding = marker.encoding = php_mb_get_encoding(encoding);
if (!string.encoding) { if (!string.encoding) {
@ -3022,8 +2974,6 @@ MBSTRING_API char *php_mb_convert_encoding_ex(const char *input, size_t length,
} }
/* initialize string */ /* initialize string */
mbfl_string_init(&string);
mbfl_string_init(&result);
string.encoding = from_encoding; string.encoding = from_encoding;
string.no_language = MBSTRG(language); string.no_language = MBSTRG(language);
string.val = (unsigned char *)input; string.val = (unsigned char *)input;
@ -3040,6 +2990,7 @@ MBSTRING_API char *php_mb_convert_encoding_ex(const char *input, size_t length,
mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar)); mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
/* do it */ /* do it */
mbfl_string_init(&result);
ret = mbfl_buffer_converter_feed_result(convd, &string, &result); ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
if (ret) { if (ret) {
if (output_len) { if (output_len) {
@ -3268,17 +3219,17 @@ static char *mbstring_convert_case(
Returns a case-folded version of sourcestring */ Returns a case-folded version of sourcestring */
PHP_FUNCTION(mb_convert_case) PHP_FUNCTION(mb_convert_case)
{ {
const char *from_encoding = NULL; zend_string *from_encoding = NULL;
char *str; char *str;
size_t str_len, from_encoding_len; size_t str_len;
zend_long case_mode = 0; zend_long case_mode = 0;
char *newstr; char *newstr;
size_t ret_len; size_t ret_len;
const mbfl_encoding *enc; const mbfl_encoding *enc;
RETVAL_FALSE; RETVAL_FALSE;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|s!", &str, &str_len, if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|S!", &str, &str_len,
&case_mode, &from_encoding, &from_encoding_len) == FAILURE) { &case_mode, &from_encoding) == FAILURE) {
return; return;
} }
@ -3307,15 +3258,15 @@ PHP_FUNCTION(mb_convert_case)
*/ */
PHP_FUNCTION(mb_strtoupper) PHP_FUNCTION(mb_strtoupper)
{ {
const char *from_encoding = NULL; zend_string *from_encoding = NULL;
char *str; char *str;
size_t str_len, from_encoding_len; size_t str_len;
char *newstr; char *newstr;
size_t ret_len; size_t ret_len;
const mbfl_encoding *enc; const mbfl_encoding *enc;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s!", &str, &str_len, if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|S!", &str, &str_len,
&from_encoding, &from_encoding_len) == FAILURE) { &from_encoding) == FAILURE) {
return; return;
} }
@ -3341,15 +3292,15 @@ PHP_FUNCTION(mb_strtoupper)
*/ */
PHP_FUNCTION(mb_strtolower) PHP_FUNCTION(mb_strtolower)
{ {
const char *from_encoding = NULL; zend_string *from_encoding = NULL;
char *str; char *str;
size_t str_len, from_encoding_len; size_t str_len;
char *newstr; char *newstr;
size_t ret_len; size_t ret_len;
const mbfl_encoding *enc; const mbfl_encoding *enc;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s!", &str, &str_len, if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|S!", &str, &str_len,
&from_encoding, &from_encoding_len) == FAILURE) { &from_encoding) == FAILURE) {
return; return;
} }
@ -3510,7 +3461,6 @@ PHP_FUNCTION(mb_encode_mimeheader)
size_t linefeed_len; size_t linefeed_len;
zend_long indent = 0; zend_long indent = 0;
mbfl_string_init(&string);
string.no_language = MBSTRG(language); string.no_language = MBSTRG(language);
string.encoding = MBSTRG(current_internal_encoding); string.encoding = MBSTRG(current_internal_encoding);
@ -3561,7 +3511,6 @@ PHP_FUNCTION(mb_decode_mimeheader)
{ {
mbfl_string string, result, *ret; mbfl_string string, result, *ret;
mbfl_string_init(&string);
string.no_language = MBSTRG(language); string.no_language = MBSTRG(language);
string.encoding = MBSTRG(current_internal_encoding); string.encoding = MBSTRG(current_internal_encoding);
@ -3589,12 +3538,9 @@ PHP_FUNCTION(mb_convert_kana)
mbfl_string string, result, *ret; mbfl_string string, result, *ret;
char *optstr = NULL; char *optstr = NULL;
size_t optstr_len; size_t optstr_len;
char *encname = NULL; zend_string *encname = NULL;
size_t encname_len;
mbfl_string_init(&string); if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|sS", (char **)&string.val, &string.len, &optstr, &optstr_len, &encname) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|ss", (char **)&string.val, &string.len, &optstr, &optstr_len, &encname, &encname_len) == FAILURE) {
return; return;
} }
@ -3917,7 +3863,6 @@ php_mb_numericentity_exec(INTERNAL_FUNCTION_PARAMETERS, int type)
return; return;
} }
mbfl_string_init(&string);
string.no_language = MBSTRG(language); string.no_language = MBSTRG(language);
string.encoding = MBSTRG(current_internal_encoding); string.encoding = MBSTRG(current_internal_encoding);
string.val = (unsigned char *)str; string.val = (unsigned char *)str;
@ -4824,7 +4769,7 @@ PHP_FUNCTION(mb_check_encoding)
/* }}} */ /* }}} */
static inline zend_long php_mb_ord(const char* str, size_t str_len, const char* enc_name) static inline zend_long php_mb_ord(const char *str, size_t str_len, zend_string *enc_name)
{ {
const mbfl_encoding *enc; const mbfl_encoding *enc;
enum mbfl_no_encoding no_enc; enum mbfl_no_encoding no_enc;
@ -4836,7 +4781,7 @@ static inline zend_long php_mb_ord(const char* str, size_t str_len, const char*
no_enc = enc->no_encoding; no_enc = enc->no_encoding;
if (php_mb_is_unsupported_no_encoding(no_enc)) { if (php_mb_is_unsupported_no_encoding(no_enc)) {
php_error_docref(NULL, E_WARNING, "Unsupported encoding \"%s\"", enc_name); php_error_docref(NULL, E_WARNING, "Unsupported encoding \"%s\"", ZSTR_VAL(enc_name));
return -1; return -1;
} }
@ -4879,16 +4824,15 @@ static inline zend_long php_mb_ord(const char* str, size_t str_len, const char*
/* {{{ proto int|false mb_ord([string str[, string encoding]]) */ /* {{{ proto int|false mb_ord([string str[, string encoding]]) */
PHP_FUNCTION(mb_ord) PHP_FUNCTION(mb_ord)
{ {
char* str; char *str;
size_t str_len; size_t str_len;
char* enc = NULL; zend_string *enc = NULL;
size_t enc_len;
zend_long cp; zend_long cp;
ZEND_PARSE_PARAMETERS_START(1, 2) ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_STRING(str, str_len) Z_PARAM_STRING(str, str_len)
Z_PARAM_OPTIONAL Z_PARAM_OPTIONAL
Z_PARAM_STRING(enc, enc_len) Z_PARAM_STR(enc)
ZEND_PARSE_PARAMETERS_END(); ZEND_PARSE_PARAMETERS_END();
cp = php_mb_ord(str, str_len, enc); cp = php_mb_ord(str, str_len, enc);
@ -4902,7 +4846,7 @@ PHP_FUNCTION(mb_ord)
/* }}} */ /* }}} */
static inline zend_string *php_mb_chr(zend_long cp, const char *enc_name) static inline zend_string *php_mb_chr(zend_long cp, zend_string *enc_name)
{ {
const mbfl_encoding *enc; const mbfl_encoding *enc;
enum mbfl_no_encoding no_enc; enum mbfl_no_encoding no_enc;
@ -4917,7 +4861,7 @@ static inline zend_string *php_mb_chr(zend_long cp, const char *enc_name)
no_enc = enc->no_encoding; no_enc = enc->no_encoding;
if (php_mb_is_unsupported_no_encoding(no_enc)) { if (php_mb_is_unsupported_no_encoding(no_enc)) {
php_error_docref(NULL, E_WARNING, "Unsupported encoding \"%s\"", enc_name); php_error_docref(NULL, E_WARNING, "Unsupported encoding \"%s\"", ZSTR_VAL(enc_name));
return NULL; return NULL;
} }
@ -4990,14 +4934,13 @@ static inline zend_string *php_mb_chr(zend_long cp, const char *enc_name)
PHP_FUNCTION(mb_chr) PHP_FUNCTION(mb_chr)
{ {
zend_long cp; zend_long cp;
char* enc = NULL; zend_string *enc = NULL;
size_t enc_len;
zend_string* ret; zend_string* ret;
ZEND_PARSE_PARAMETERS_START(1, 2) ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_LONG(cp) Z_PARAM_LONG(cp)
Z_PARAM_OPTIONAL Z_PARAM_OPTIONAL
Z_PARAM_STRING(enc, enc_len) Z_PARAM_STR(enc)
ZEND_PARSE_PARAMETERS_END(); ZEND_PARSE_PARAMETERS_END();
ret = php_mb_chr(cp, enc); ret = php_mb_chr(cp, enc);
@ -5024,14 +4967,13 @@ PHP_FUNCTION(mb_scrub)
const mbfl_encoding *enc; const mbfl_encoding *enc;
char* str; char* str;
size_t str_len; size_t str_len;
char *enc_name = NULL; zend_string *enc_name = NULL;
size_t enc_name_len;
char *ret; char *ret;
ZEND_PARSE_PARAMETERS_START(1, 2) ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_STRING(str, str_len) Z_PARAM_STRING(str, str_len)
Z_PARAM_OPTIONAL Z_PARAM_OPTIONAL
Z_PARAM_STRING(enc_name, enc_name_len) Z_PARAM_STR(enc_name)
ZEND_PARSE_PARAMETERS_END(); ZEND_PARSE_PARAMETERS_END();
enc = php_mb_get_encoding(enc_name); enc = php_mb_get_encoding(enc_name);
@ -5161,7 +5103,7 @@ MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, size_t nby
/* {{{ MBSTRING_API int php_mb_stripos() /* {{{ MBSTRING_API int php_mb_stripos()
*/ */
MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, const char *from_encoding) MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, zend_string *from_encoding)
{ {
size_t n = (size_t) -1; size_t n = (size_t) -1;
mbfl_string haystack, needle; mbfl_string haystack, needle;

View file

@ -128,7 +128,7 @@ MBSTRING_API int php_mb_check_encoding_list(const char *encoding_list);
MBSTRING_API size_t php_mb_mbchar_bytes_ex(const char *s, const mbfl_encoding *enc); MBSTRING_API size_t php_mb_mbchar_bytes_ex(const char *s, const mbfl_encoding *enc);
MBSTRING_API size_t php_mb_mbchar_bytes(const char *s); MBSTRING_API size_t php_mb_mbchar_bytes(const char *s);
MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, const char *from_encoding); MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, zend_string *from_encoding);
MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const char *enc); MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const char *enc);
/* internal use only */ /* internal use only */
@ -167,7 +167,7 @@ ZEND_BEGIN_MODULE_GLOBALS(mbstring)
#if HAVE_MBREGEX #if HAVE_MBREGEX
struct _zend_mb_regex_globals *mb_regex_globals; struct _zend_mb_regex_globals *mb_regex_globals;
#endif #endif
char *last_used_encoding_name; zend_string *last_used_encoding_name;
const mbfl_encoding *last_used_encoding; const mbfl_encoding *last_used_encoding;
ZEND_END_MODULE_GLOBALS(mbstring) ZEND_END_MODULE_GLOBALS(mbstring)

View file

@ -1838,7 +1838,7 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
/* }}} */ /* }}} */
/* {{{ proto object odbc_fetch_object(int result [, int rownumber]) /* {{{ proto object odbc_fetch_object(resource result [, int rownumber])
Fetch a result row as an object */ Fetch a result row as an object */
PHP_FUNCTION(odbc_fetch_object) PHP_FUNCTION(odbc_fetch_object)
{ {
@ -1849,7 +1849,7 @@ PHP_FUNCTION(odbc_fetch_object)
} }
/* }}} */ /* }}} */
/* {{{ proto array odbc_fetch_array(int result [, int rownumber]) /* {{{ proto array odbc_fetch_array(resource result [, int rownumber])
Fetch a result row as an associative array */ Fetch a result row as an associative array */
PHP_FUNCTION(odbc_fetch_array) PHP_FUNCTION(odbc_fetch_array)
{ {