diff --git a/ext/standard/string.c b/ext/standard/string.c index c8d11c1abdb..047f5454d63 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -2847,6 +2847,7 @@ static void php_strtr_array(zval *return_value, zend_string *input, HashTable *p len = ZSTR_LEN(key_used); if (UNEXPECTED(len > slen)) { /* skip long patterns */ + zend_string_release(key_used); continue; } if (len > maxlen) { diff --git a/ext/standard/tests/strings/bug78612.phpt b/ext/standard/tests/strings/bug78612.phpt new file mode 100644 index 00000000000..7dad605e80d --- /dev/null +++ b/ext/standard/tests/strings/bug78612.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #78612 (strtr leaks memory when integer keys are used and the subject string shorter). +--FILE-- + +--EXPECT-- +Hello