diff --git a/ext/session/tests/gh13891.phpt b/ext/session/tests/gh13891.phpt new file mode 100644 index 0000000000000..7df9bffa770bc --- /dev/null +++ b/ext/session/tests/gh13891.phpt @@ -0,0 +1,17 @@ +--TEST-- +GH-13891 (memleak and segfault when using ini_set with session.trans_sid_hosts) +--INI-- +session.use_cookies=0 +session.use_only_cookies=0 +session.use_trans_sid=1 +session.trans_sid_hosts=php.net +--EXTENSIONS-- +session +--SKIPIF-- + +--FILE-- + +--EXPECT-- diff --git a/ext/standard/url_scanner_ex.re b/ext/standard/url_scanner_ex.re index 8e5b43467fc88..a4a48b6bf60ee 100644 --- a/ext/standard/url_scanner_ex.re +++ b/ext/standard/url_scanner_ex.re @@ -138,9 +138,10 @@ static int php_ini_on_update_hosts(zend_ini_entry *entry, zend_string *new_value } keylen = q - key; if (keylen > 0) { - tmp_key = zend_string_init(key, keylen, 0); + /* Note: the hash table is persistently allocated, so the strings must be too! */ + tmp_key = zend_string_init(key, keylen, true); zend_hash_add_empty_element(hosts, tmp_key); - zend_string_release_ex(tmp_key, 0); + zend_string_release_ex(tmp_key, true); } } efree(tmp);