diff --git a/ext/standard/string.c b/ext/standard/string.c index fc234aafad5bb..77a828bdfa4a0 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -3024,8 +3024,8 @@ static void php_strtr_array(zval *return_value, zend_string *input, HashTable *p } 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; @@ -3499,6 +3499,7 @@ PHP_FUNCTION(strtr) } 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, diff --git a/ext/standard/tests/strings/strtr_empty_search_string.phpt b/ext/standard/tests/strings/strtr_empty_search_string.phpt new file mode 100644 index 0000000000000..3c861600ff8c9 --- /dev/null +++ b/ext/standard/tests/strings/strtr_empty_search_string.phpt @@ -0,0 +1,15 @@ +--TEST-- +strtr() trying to replace an empty string +--FILE-- + "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"