From 29fb4ab87d2b8852a61e978d035b7caf52697143 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Thu, 16 Jul 2009 00:03:44 +0000 Subject: [PATCH] fix ini_restore problem --- Zend/zend_ini.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c index 0c33e55595dab..b336878f7fa98 100644 --- a/Zend/zend_ini.c +++ b/Zend/zend_ini.c @@ -46,15 +46,20 @@ static int zend_remove_ini_entries(zend_ini_entry *ini_entry, int *module_number static int zend_restore_ini_entry_cb(zend_ini_entry *ini_entry, int stage TSRMLS_DC) /* {{{ */ { + int result = FAILURE; if (ini_entry->modified) { if (ini_entry->on_modify) { zend_try { /* even if on_modify bails out, we have to continue on with restoring, since there can be allocated variables that would be freed on MM shutdown and would lead to memory corruption later ini entry is modified again */ - ini_entry->on_modify(ini_entry, ini_entry->orig_value, ini_entry->orig_value_length, ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage TSRMLS_CC); + result = ini_entry->on_modify(ini_entry, ini_entry->orig_value, ini_entry->orig_value_length, ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage TSRMLS_CC); } zend_end_try(); } + if(stage == ZEND_INI_STAGE_RUNTIME && result == FAILURE) { + /* runtime failure is OK */ + return 1; + } if (ini_entry->value != ini_entry->orig_value) { efree(ini_entry->value); }