From a297c09da5ad355d53a8e8ea72655a06d15b7bc7 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Wed, 10 Jun 2020 11:16:42 +0800 Subject: Partial fixed bug #79649 (Altering disable_functions from module init corrupts memory) In module startup stage, we should not initiliaze EG(modified_ini_directives) as it use zend MM, the zend MM will be restart at the end of modules startup stage, by say "partial", because this issue still exists if altering ZEND_USER inis, we should add a zend_ini_deactive at the end of modules startup stage, but it brings some new cost, and I think no one would do things like that --- Zend/zend_ini.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'Zend/zend_ini.c') diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c index e4b9e6bc5e..3f4c9d0930 100644 --- a/Zend/zend_ini.c +++ b/Zend/zend_ini.c @@ -341,15 +341,17 @@ ZEND_API int zend_alter_ini_entry_ex(zend_string *name, zend_string *new_value, } } - if (!EG(modified_ini_directives)) { - ALLOC_HASHTABLE(EG(modified_ini_directives)); - zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0); - } - if (!modified) { - ini_entry->orig_value = ini_entry->value; - ini_entry->orig_modifiable = modifiable; - ini_entry->modified = 1; - zend_hash_add_ptr(EG(modified_ini_directives), ini_entry->name, ini_entry); + if (ini_entry->modifiable != ZEND_INI_SYSTEM) { + if (!EG(modified_ini_directives)) { + ALLOC_HASHTABLE(EG(modified_ini_directives)); + zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0); + } + if (!modified) { + ini_entry->orig_value = ini_entry->value; + ini_entry->orig_modifiable = modifiable; + ini_entry->modified = 1; + zend_hash_add_ptr(EG(modified_ini_directives), ini_entry->name, ini_entry); + } } duplicate = zend_string_copy(new_value); -- cgit v1.2.1