/**
* @param string|array $from
- * @return string|false
*/
-function strtr(string $str, $from, string $to = UNKNOWN) {}
+function strtr(string $str, $from, string $to = UNKNOWN): string {}
function strrev(string $str): string {}
ZEND_ARG_TYPE_INFO(0, delimiters, IS_STRING, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_strtr, 0, 0, 2)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strtr, 0, 2, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0)
ZEND_ARG_INFO(0, from)
ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0)
} else {
len = ZSTR_LEN(str_key);
if (UNEXPECTED(len < 1)) {
- efree(num_bitset);
- RETURN_FALSE;
+ php_error_docref(NULL, E_WARNING, "Ignoring replacement of empty string");
+ continue;
} else if (UNEXPECTED(len > slen)) {
/* skip long patterns */
continue;
}
replace = zval_get_tmp_string(entry, &tmp_replace);
if (ZSTR_LEN(str_key) < 1) {
+ php_error_docref(NULL, E_WARNING, "Ignoring replacement of empty string");
RETVAL_STR_COPY(str);
} else if (ZSTR_LEN(str_key) == 1) {
RETVAL_STR(php_char_to_str_ex(str,
--- /dev/null
+--TEST--
+strtr() trying to replace an empty string
+--FILE--
+<?php
+
+var_dump(strtr("foo", ["" => "bar"]));
+var_dump(strtr("foo", ["" => "bar", "x" => "y"]));
+
+?>
+--EXPECTF--
+Warning: strtr(): Ignoring replacement of empty string in %s on line %d
+string(3) "foo"
+
+Warning: strtr(): Ignoring replacement of empty string in %s on line %d
+string(3) "foo"