]> granicus.if.org Git - php/commitdiff
fi memory corruption if one on the on_modify handlers errors out
authorStanislav Malyshev <stas@php.net>
Tue, 12 Apr 2005 12:59:36 +0000 (12:59 +0000)
committerStanislav Malyshev <stas@php.net>
Tue, 12 Apr 2005 12:59:36 +0000 (12:59 +0000)
Zend/zend_ini.c

index e43ecbb83369313b78ac8b581d6dd82a86471b2b..bc6609c1eaf5517da601d62be829f859121e7988 100644 (file)
@@ -48,7 +48,12 @@ static int zend_restore_ini_entry_cb(zend_ini_entry *ini_entry, int stage TSRMLS
 {
        if (ini_entry->modified) {
                if (ini_entry->on_modify) {
-                       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_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);
+                       } zend_end_try();
                }
                efree(ini_entry->value);
                ini_entry->value = ini_entry->orig_value;