ext/mbstring: Always pass length to php_mb_get_encoding_or_pass()

We have access to this information, so propagate it instead of calling strlen().
This also removes the newly introduced _ex() variant.
This commit is contained in:
Gina Peter Banyard 2023-11-19 07:02:06 +00:00
parent b61479bb28
commit 86dfbadc06

View File

@ -269,12 +269,12 @@ static const mbfl_encoding *php_mb_get_encoding(zend_string *encoding_name, uint
}
}
static const mbfl_encoding *php_mb_get_encoding_or_pass(const char *encoding_name) {
if (strcmp(encoding_name, "pass") == 0) {
static const mbfl_encoding *php_mb_get_encoding_or_pass(const char *encoding_name, size_t encoding_name_len) {
if (strncmp(encoding_name, "pass", encoding_name_len) == 0) {
return &mbfl_encoding_pass;
}
return mbfl_name2encoding(encoding_name);
return mbfl_name2encoding_ex(encoding_name, encoding_name_len);
}
static size_t count_commas(const char *p, const char *end) {
@ -761,7 +761,7 @@ static PHP_INI_MH(OnUpdate_mbstring_http_input)
/* }}} */
static zend_result _php_mb_ini_mbstring_http_output_set(const char *new_value, size_t length) {
const mbfl_encoding *encoding = php_mb_get_encoding_or_pass(new_value);
const mbfl_encoding *encoding = php_mb_get_encoding_or_pass(new_value, length);
if (!encoding) {
return FAILURE;
}
@ -1348,7 +1348,7 @@ PHP_FUNCTION(mb_http_output)
ZEND_ASSERT(MBSTRG(current_http_output_encoding));
RETURN_STRING(MBSTRG(current_http_output_encoding)->name);
} else {
const mbfl_encoding *encoding = php_mb_get_encoding_or_pass(name);
const mbfl_encoding *encoding = php_mb_get_encoding_or_pass(name, name_len);
if (!encoding) {
zend_argument_value_error(1, "must be a valid encoding, \"%s\" given", name);
RETURN_THROWS();