colder          Wed Nov 19 01:59:08 2008 UTC

  Added files:                 
    /ZendEngine2/tests  bug46241.phpt 

  Modified files:              
    /ZendEngine2        zend_execute_API.c zend_vm_def.h zend_vm_execute.h 
    /ZendEngine2/tests  bug46196.phpt 
    /php-src/ext/date   php_date.c 
    /php-src/ext/dom    attr.c cdatasection.c comment.c document.c 
                        documentfragment.c element.c entityreference.c 
                        processinginstruction.c text.c xpath.c 
    /php-src/ext/mysqli mysqli_driver.c 
    /php-src/ext/simplexml      simplexml.c 
    /php-src/ext/spl    spl_array.c spl_directory.c spl_iterators.c 
                        spl_observer.c 
    /php-src/ext/sqlite sqlite.c 
    /php-src/ext/sqlite3        sqlite3.c 
  Log:
  Fix #46241 (stacked error_handlers, error_handling in general)
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute_API.c?r1=1.466&r2=1.467&diff_format=u
Index: ZendEngine2/zend_execute_API.c
diff -u ZendEngine2/zend_execute_API.c:1.466 
ZendEngine2/zend_execute_API.c:1.467
--- ZendEngine2/zend_execute_API.c:1.466        Thu Oct  2 19:53:48 2008
+++ ZendEngine2/zend_execute_API.c      Wed Nov 19 01:59:06 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute_API.c,v 1.466 2008/10/02 19:53:48 colder Exp $ */
+/* $Id: zend_execute_API.c,v 1.467 2008/11/19 01:59:06 colder Exp $ */
 
 #include <stdio.h>
 #include <signal.h>
@@ -956,14 +956,11 @@
                EG(opline_ptr) = original_opline_ptr;
        } else if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) 
{
                int call_via_handler = 
(EX(function_state).function->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0;
-               zend_error_handling error_handling;
-               zend_save_error_handling(&error_handling TSRMLS_CC);
                ALLOC_INIT_ZVAL(*fci->retval_ptr_ptr);
                if (EX(function_state).function->common.scope) {
                        EG(scope) = EX(function_state).function->common.scope;
                }
                ((zend_internal_function *) 
EX(function_state).function)->handler(fci->param_count, *fci->retval_ptr_ptr, 
fci->retval_ptr_ptr, (fci->object_pp?*fci->object_pp:NULL), 1 TSRMLS_CC);
-               zend_restore_error_handling(&error_handling TSRMLS_CC);
                /*      We shouldn't fix bad extensions here,
                    because it can break proper ones (Bug #34045)
                if (!EX(function_state).function->common.return_reference)
@@ -984,10 +981,7 @@
 
                /* Not sure what should be done here if it's a static method */
                if (fci->object_pp) {
-                       zend_error_handling error_handling;
-                       zend_save_error_handling(&error_handling TSRMLS_CC);
                        
Z_OBJ_HT_PP(fci->object_pp)->call_method(EX(function_state).function->common.function_name,
 fci->param_count, *fci->retval_ptr_ptr, fci->retval_ptr_ptr, *fci->object_pp, 
1 TSRMLS_CC);
-                       zend_restore_error_handling(&error_handling TSRMLS_CC);
                } else {
                        zend_error_noreturn(E_ERROR, "Cannot call overloaded 
function for non-object");
                }
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.247&r2=1.248&diff_format=u
Index: ZendEngine2/zend_vm_def.h
diff -u ZendEngine2/zend_vm_def.h:1.247 ZendEngine2/zend_vm_def.h:1.248
--- ZendEngine2/zend_vm_def.h:1.247     Mon Oct  6 00:35:19 2008
+++ ZendEngine2/zend_vm_def.h   Wed Nov 19 01:59:07 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_vm_def.h,v 1.247 2008/10/06 00:35:19 felipe Exp $ */
+/* $Id: zend_vm_def.h,v 1.248 2008/11/19 01:59:07 colder Exp $ */
 
 /* If you change this file, please regenerate the zend_vm_execute.h and
  * zend_vm_opcodes.h files by running:
@@ -2342,7 +2342,6 @@
        EX(function_state).arguments = 
zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
 
        if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
-               zend_error_handling error_handling;
                ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr);
                EX_T(opline->result.u.var).var.ptr_ptr = 
&EX_T(opline->result.u.var).var.ptr;
                EX_T(opline->result.u.var).var.fcall_returned_reference = 
EX(function_state).function->common.return_reference;
@@ -2357,14 +2356,12 @@
                                arg_count--;
                        }
                }
-               zend_save_error_handling(&error_handling TSRMLS_CC);
                if (!zend_execute_internal) {
                        /* saves one function call if zend_execute_internal is 
not used */
                        ((zend_internal_function *) 
EX(function_state).function)->handler(opline->extended_value, 
EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, 
EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
                } else {
                        zend_execute_internal(EXECUTE_DATA, 
RETURN_VALUE_USED(opline) TSRMLS_CC);
                }
-               zend_restore_error_handling(&error_handling TSRMLS_CC);
 
                if (!RETURN_VALUE_USED(opline)) {
                        zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
@@ -2412,10 +2409,7 @@
 
                        /* Not sure what should be done here if it's a static 
method */
                if (EX(object)) {
-                       zend_error_handling error_handling;
-                       zend_save_error_handling(&error_handling TSRMLS_CC);
                        
Z_OBJ_HT_P(EX(object))->call_method(EX(function_state).function->common.function_name,
 opline->extended_value, EX_T(opline->result.u.var).var.ptr, 
&EX_T(opline->result.u.var).var.ptr, EX(object), RETURN_VALUE_USED(opline) 
TSRMLS_CC);
-                       zend_restore_error_handling(&error_handling TSRMLS_CC);
                } else {
                        zend_error_noreturn(E_ERROR, "Cannot call overloaded 
function for non-object");
                }
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.251&r2=1.252&diff_format=u
Index: ZendEngine2/zend_vm_execute.h
diff -u ZendEngine2/zend_vm_execute.h:1.251 ZendEngine2/zend_vm_execute.h:1.252
--- ZendEngine2/zend_vm_execute.h:1.251 Mon Oct  6 00:35:19 2008
+++ ZendEngine2/zend_vm_execute.h       Wed Nov 19 01:59:07 2008
@@ -302,7 +302,6 @@
        EX(function_state).arguments = 
zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
 
        if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
-               zend_error_handling error_handling;
                ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr);
                EX_T(opline->result.u.var).var.ptr_ptr = 
&EX_T(opline->result.u.var).var.ptr;
                EX_T(opline->result.u.var).var.fcall_returned_reference = 
EX(function_state).function->common.return_reference;
@@ -317,14 +316,12 @@
                                arg_count--;
                        }
                }
-               zend_save_error_handling(&error_handling TSRMLS_CC);
                if (!zend_execute_internal) {
                        /* saves one function call if zend_execute_internal is 
not used */
                        ((zend_internal_function *) 
EX(function_state).function)->handler(opline->extended_value, 
EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, 
EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
                } else {
                        zend_execute_internal(execute_data, 
RETURN_VALUE_USED(opline) TSRMLS_CC);
                }
-               zend_restore_error_handling(&error_handling TSRMLS_CC);
 
                if (!RETURN_VALUE_USED(opline)) {
                        zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
@@ -372,10 +369,7 @@
 
                        /* Not sure what should be done here if it's a static 
method */
                if (EX(object)) {
-                       zend_error_handling error_handling;
-                       zend_save_error_handling(&error_handling TSRMLS_CC);
                        
Z_OBJ_HT_P(EX(object))->call_method(EX(function_state).function->common.function_name,
 opline->extended_value, EX_T(opline->result.u.var).var.ptr, 
&EX_T(opline->result.u.var).var.ptr, EX(object), RETURN_VALUE_USED(opline) 
TSRMLS_CC);
-                       zend_restore_error_handling(&error_handling TSRMLS_CC);
                } else {
                        zend_error_noreturn(E_ERROR, "Cannot call overloaded 
function for non-object");
                }
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug46196.phpt?r1=1.1&r2=1.2&diff_format=u
Index: ZendEngine2/tests/bug46196.phpt
diff -u ZendEngine2/tests/bug46196.phpt:1.1 ZendEngine2/tests/bug46196.phpt:1.2
--- ZendEngine2/tests/bug46196.phpt:1.1 Sun Nov  2 20:15:15 2008
+++ ZendEngine2/tests/bug46196.phpt     Wed Nov 19 01:59:07 2008
@@ -2,8 +2,6 @@
 Test restore_error_handler() function : bug #46196
 --CREDITS--
 Olivier Doucet
---XFAIL--
-This test will fail until bug #46196 is fixed
 --FILE--
 <?php
 /* Prototype  : void restore_error_handler(void)
http://cvs.php.net/viewvc.cgi/php-src/ext/date/php_date.c?r1=1.211&r2=1.212&diff_format=u
Index: php-src/ext/date/php_date.c
diff -u php-src/ext/date/php_date.c:1.211 php-src/ext/date/php_date.c:1.212
--- php-src/ext/date/php_date.c:1.211   Mon Nov 17 11:26:19 2008
+++ php-src/ext/date/php_date.c Wed Nov 19 01:59:07 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_date.c,v 1.211 2008/11/17 11:26:19 felipe Exp $ */
+/* $Id: php_date.c,v 1.212 2008/11/19 01:59:07 colder Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -2557,11 +2557,13 @@
        zval *timezone_object = NULL;
        char *time_str = NULL;
        int time_str_len = 0;
+       zend_error_handling error_handling;
        
-       zend_replace_error_handling(EH_THROW, NULL, NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
        if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO", 
&time_str, &time_str_len, &timezone_object, date_ce_timezone)) {
                date_initialize(zend_object_store_get_object(getThis() 
TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC);
        }
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -3259,8 +3261,9 @@
        int tz_len;
        timelib_tzinfo *tzi = NULL;
        php_timezone_obj *tzobj;
+       zend_error_handling error_handling;
        
-       zend_replace_error_handling(EH_THROW, NULL, NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
        if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", 
&tz, &tz_len)) {
                if (SUCCESS == timezone_initialize(&tzi, tz TSRMLS_CC)) {
                        tzobj = zend_object_store_get_object(getThis() 
TSRMLS_CC);
@@ -3271,6 +3274,7 @@
                        ZVAL_NULL(getThis());
                }
        }
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -3610,8 +3614,9 @@
        int   interval_string_length;
        php_interval_obj *diobj;
        timelib_rel_time *reltime;
+       zend_error_handling error_handling;
        
-       zend_replace_error_handling(EH_THROW, NULL, NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", 
&interval_string, &interval_string_length) == SUCCESS) {
                if (date_interval_initialize(&reltime, interval_string, 
interval_string_length TSRMLS_CC) == SUCCESS) {
                        diobj = zend_object_store_get_object(getThis() 
TSRMLS_CC);
@@ -3621,6 +3626,7 @@
                        ZVAL_NULL(getThis());
                }
        }
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -3763,12 +3769,14 @@
        char *isostr = NULL;
        int   isostr_len = 0;
        timelib_time *clone;
+       zend_error_handling error_handling;
        
-       zend_replace_error_handling(EH_THROW, NULL, NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
        if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() 
TSRMLS_CC, "OOl|l", &start, date_ce_date, &interval, date_ce_interval, 
&recurrences, &options) == FAILURE) {
                if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 
ZEND_NUM_ARGS() TSRMLS_CC, "OOO|l", &start, date_ce_date, &interval, 
date_ce_interval, &end, date_ce_date, &options) == FAILURE) {
                        if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, 
ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &isostr, &isostr_len, &options) == FAILURE) {
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, 
"This constructor accepts either (DateTime, DateInterval, int) OR (DateTime, 
DateInterval, DateTime) OR (string) as arguments.");
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return;
                        }
                }
@@ -3835,6 +3843,7 @@
        dpobj->recurrences = recurrences + dpobj->include_start_date;
 
        dpobj->initialized = 1;
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/attr.c?r1=1.35&r2=1.36&diff_format=u
Index: php-src/ext/dom/attr.c
diff -u php-src/ext/dom/attr.c:1.35 php-src/ext/dom/attr.c:1.36
--- php-src/ext/dom/attr.c:1.35 Mon Nov 17 11:26:19 2008
+++ php-src/ext/dom/attr.c      Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: attr.c,v 1.35 2008/11/17 11:26:19 felipe Exp $ */
+/* $Id: attr.c,v 1.36 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -66,6 +66,7 @@
 
        zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, 
&error_handling TSRMLS_CC);
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Os&|s&", &id, dom_attr_class_entry, &name, &name_len, UG(utf8_conv), &value, 
&value_len, UG(utf8_conv)) == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        zend_restore_error_handling(&error_handling TSRMLS_CC);
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/cdatasection.c?r1=1.26&r2=1.27&diff_format=u
Index: php-src/ext/dom/cdatasection.c
diff -u php-src/ext/dom/cdatasection.c:1.26 php-src/ext/dom/cdatasection.c:1.27
--- php-src/ext/dom/cdatasection.c:1.26 Mon Nov 17 11:26:19 2008
+++ php-src/ext/dom/cdatasection.c      Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: cdatasection.c,v 1.26 2008/11/17 11:26:19 felipe Exp $ */
+/* $Id: cdatasection.c,v 1.27 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -58,6 +58,7 @@
 
        zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, 
&error_handling TSRMLS_CC);
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Os&", &id, dom_cdatasection_class_entry, &value, &value_len, UG(utf8_conv)) == 
FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        zend_restore_error_handling(&error_handling TSRMLS_CC);
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/comment.c?r1=1.26&r2=1.27&diff_format=u
Index: php-src/ext/dom/comment.c
diff -u php-src/ext/dom/comment.c:1.26 php-src/ext/dom/comment.c:1.27
--- php-src/ext/dom/comment.c:1.26      Mon Nov 17 11:26:19 2008
+++ php-src/ext/dom/comment.c   Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: comment.c,v 1.26 2008/11/17 11:26:19 felipe Exp $ */
+/* $Id: comment.c,v 1.27 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -58,6 +58,7 @@
 
        zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, 
&error_handling TSRMLS_CC);
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O|s&", &id, dom_comment_class_entry, &value, &value_len, UG(utf8_conv)) == 
FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        zend_restore_error_handling(&error_handling TSRMLS_CC);
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/document.c?r1=1.97&r2=1.98&diff_format=u
Index: php-src/ext/dom/document.c
diff -u php-src/ext/dom/document.c:1.97 php-src/ext/dom/document.c:1.98
--- php-src/ext/dom/document.c:1.97     Mon Nov 17 11:26:19 2008
+++ php-src/ext/dom/document.c  Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: document.c,v 1.97 2008/11/17 11:26:19 felipe Exp $ */
+/* $Id: document.c,v 1.98 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1443,6 +1443,7 @@
 
        zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, 
&error_handling TSRMLS_CC);
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O|s&s&", &id, dom_document_class_entry, &version, &version_len, UG(utf8_conv), 
&encoding, &encoding_len, UG(utf8_conv)) == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        zend_restore_error_handling(&error_handling TSRMLS_CC);
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/documentfragment.c?r1=1.30&r2=1.31&diff_format=u
Index: php-src/ext/dom/documentfragment.c
diff -u php-src/ext/dom/documentfragment.c:1.30 
php-src/ext/dom/documentfragment.c:1.31
--- php-src/ext/dom/documentfragment.c:1.30     Mon Nov 17 11:26:19 2008
+++ php-src/ext/dom/documentfragment.c  Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: documentfragment.c,v 1.30 2008/11/17 11:26:19 felipe Exp $ */
+/* $Id: documentfragment.c,v 1.31 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -60,6 +60,7 @@
 
        zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, 
&error_handling TSRMLS_CC);
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O", &id, dom_documentfragment_class_entry) == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/element.c?r1=1.63&r2=1.64&diff_format=u
Index: php-src/ext/dom/element.c
diff -u php-src/ext/dom/element.c:1.63 php-src/ext/dom/element.c:1.64
--- php-src/ext/dom/element.c:1.63      Mon Nov 17 11:26:19 2008
+++ php-src/ext/dom/element.c   Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: element.c,v 1.63 2008/11/17 11:26:19 felipe Exp $ */
+/* $Id: element.c,v 1.64 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -166,6 +166,7 @@
 
        zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, 
&error_handling TSRMLS_CC);
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Os&|s!&s&", &id, dom_element_class_entry, &name, &name_len, UG(utf8_conv), 
&value, &value_len, UG(utf8_conv), &uri, &uri_len, UG(utf8_conv)) == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        zend_restore_error_handling(&error_handling TSRMLS_CC);
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/entityreference.c?r1=1.27&r2=1.28&diff_format=u
Index: php-src/ext/dom/entityreference.c
diff -u php-src/ext/dom/entityreference.c:1.27 
php-src/ext/dom/entityreference.c:1.28
--- php-src/ext/dom/entityreference.c:1.27      Mon Nov 17 11:26:19 2008
+++ php-src/ext/dom/entityreference.c   Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: entityreference.c,v 1.27 2008/11/17 11:26:19 felipe Exp $ */
+/* $Id: entityreference.c,v 1.28 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -58,6 +58,7 @@
 
        zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, 
&error_handling TSRMLS_CC);
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Os&", &id, dom_entityreference_class_entry, &name, &name_len, UG(utf8_conv)) 
== FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        zend_restore_error_handling(&error_handling TSRMLS_CC);
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/processinginstruction.c?r1=1.33&r2=1.34&diff_format=u
Index: php-src/ext/dom/processinginstruction.c
diff -u php-src/ext/dom/processinginstruction.c:1.33 
php-src/ext/dom/processinginstruction.c:1.34
--- php-src/ext/dom/processinginstruction.c:1.33        Mon Nov 17 11:26:20 2008
+++ php-src/ext/dom/processinginstruction.c     Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: processinginstruction.c,v 1.33 2008/11/17 11:26:20 felipe Exp $ */
+/* $Id: processinginstruction.c,v 1.34 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -59,6 +59,7 @@
 
        zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, 
&error_handling TSRMLS_CC);
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"Os&|s&", &id, dom_processinginstruction_class_entry, &name, &name_len, 
UG(utf8_conv), &value, &value_len, UG(utf8_conv)) == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        zend_restore_error_handling(&error_handling TSRMLS_CC);
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/text.c?r1=1.43&r2=1.44&diff_format=u
Index: php-src/ext/dom/text.c
diff -u php-src/ext/dom/text.c:1.43 php-src/ext/dom/text.c:1.44
--- php-src/ext/dom/text.c:1.43 Mon Nov 17 11:26:20 2008
+++ php-src/ext/dom/text.c      Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: text.c,v 1.43 2008/11/17 11:26:20 felipe Exp $ */
+/* $Id: text.c,v 1.44 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -74,6 +74,7 @@
 
        zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, 
&error_handling TSRMLS_CC);
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O|s&", &id, dom_text_class_entry, &value, &value_len, UG(utf8_conv)) == 
FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        zend_restore_error_handling(&error_handling TSRMLS_CC);
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/xpath.c?r1=1.43&r2=1.44&diff_format=u
Index: php-src/ext/dom/xpath.c
diff -u php-src/ext/dom/xpath.c:1.43 php-src/ext/dom/xpath.c:1.44
--- php-src/ext/dom/xpath.c:1.43        Mon Nov 17 11:26:20 2008
+++ php-src/ext/dom/xpath.c     Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: xpath.c,v 1.43 2008/11/17 11:26:20 felipe Exp $ */
+/* $Id: xpath.c,v 1.44 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -277,6 +277,7 @@
 
        zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, 
&error_handling TSRMLS_CC);
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"OO", &id, dom_xpath_class_entry, &doc, dom_document_class_entry) == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
http://cvs.php.net/viewvc.cgi/php-src/ext/mysqli/mysqli_driver.c?r1=1.16&r2=1.17&diff_format=u
Index: php-src/ext/mysqli/mysqli_driver.c
diff -u php-src/ext/mysqli/mysqli_driver.c:1.16 
php-src/ext/mysqli/mysqli_driver.c:1.17
--- php-src/ext/mysqli/mysqli_driver.c:1.16     Fri Aug  8 22:06:42 2008
+++ php-src/ext/mysqli/mysqli_driver.c  Wed Nov 19 01:59:07 2008
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqli_driver.c,v 1.16 2008/08/08 22:06:42 colder Exp $ */
+/* $Id: mysqli_driver.c,v 1.17 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -83,7 +83,7 @@
 {
        MyG(report_mode) = Z_LVAL_P(value);
        /* FIXME */
-       zend_replace_error_handling(MyG(report_mode) & MYSQLI_REPORT_STRICT ? 
EH_THROW : EH_NORMAL, NULL, NULL TSRMLS_CC);
+       /* zend_replace_error_handling(MyG(report_mode) & MYSQLI_REPORT_STRICT 
? EH_THROW : EH_NORMAL, NULL, NULL TSRMLS_CC); */
        return SUCCESS;
 }
 /* }}} */
http://cvs.php.net/viewvc.cgi/php-src/ext/simplexml/simplexml.c?r1=1.268&r2=1.269&diff_format=u
Index: php-src/ext/simplexml/simplexml.c
diff -u php-src/ext/simplexml/simplexml.c:1.268 
php-src/ext/simplexml/simplexml.c:1.269
--- php-src/ext/simplexml/simplexml.c:1.268     Mon Nov 17 11:26:23 2008
+++ php-src/ext/simplexml/simplexml.c   Wed Nov 19 01:59:07 2008
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: simplexml.c,v 1.268 2008/11/17 11:26:23 felipe Exp $ */
+/* $Id: simplexml.c,v 1.269 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -2238,6 +2238,7 @@
 
        zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|lbs&b", &data, 
&data_len, &data_type, &options, &is_url, &ns, &ns_len, UG(utf8_conv), 
&isprefix) == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
@@ -2633,7 +2634,7 @@
 {
        php_info_print_table_start();
        php_info_print_table_header(2, "Simplexml support", "enabled");
-       php_info_print_table_row(2, "Revision", "$Revision: 1.268 $");
+       php_info_print_table_row(2, "Revision", "$Revision: 1.269 $");
        php_info_print_table_row(2, "Schema support",
 #ifdef LIBXML_SCHEMAS_ENABLED
                "enabled");
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_array.c?r1=1.156&r2=1.157&diff_format=u
Index: php-src/ext/spl/spl_array.c
diff -u php-src/ext/spl/spl_array.c:1.156 php-src/ext/spl/spl_array.c:1.157
--- php-src/ext/spl/spl_array.c:1.156   Mon Nov 17 11:26:23 2008
+++ php-src/ext/spl/spl_array.c Wed Nov 19 01:59:07 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_array.c,v 1.156 2008/11/17 11:26:23 felipe Exp $ */
+/* $Id: spl_array.c,v 1.157 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -1017,16 +1017,18 @@
        zval **array;
        long ar_flags = 0;
        zend_class_entry *ce_get_iterator = spl_ce_Iterator;
+       zend_error_handling error_handling;
 
        if (ZEND_NUM_ARGS() == 0) {
                return; /* nothing to do */
        }
 
-       zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, 
NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, 
&error_handling TSRMLS_CC);
 
        intern = (spl_array_object*)zend_object_store_get_object(object 
TSRMLS_CC);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|lC", &array, 
&ar_flags, &ce_get_iterator) == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
@@ -1037,6 +1039,7 @@
        ar_flags &= ~SPL_ARRAY_INT_MASK;
 
        spl_array_set_array(object, intern, array, ar_flags, ZEND_NUM_ARGS() == 
1 TSRMLS_CC);
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.173&r2=1.174&diff_format=u
Index: php-src/ext/spl/spl_directory.c
diff -u php-src/ext/spl/spl_directory.c:1.173 
php-src/ext/spl/spl_directory.c:1.174
--- php-src/ext/spl/spl_directory.c:1.173       Mon Nov 17 11:26:23 2008
+++ php-src/ext/spl/spl_directory.c     Wed Nov 19 01:59:07 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_directory.c,v 1.173 2008/11/17 11:26:23 felipe Exp $ */
+/* $Id: spl_directory.c,v 1.174 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -425,6 +425,7 @@
 {
        spl_filesystem_object *intern;
        zval *arg1;
+       zend_error_handling error_handling;
 
        if (!file_path.v || !file_path_len) {
 #if defined(PHP_WIN32)
@@ -444,7 +445,7 @@
                return NULL;
        }
 
-       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, NULL 
TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, 
&error_handling TSRMLS_CC);
 
        ce = ce ? ce : source->info_class;
        return_value->value.obj = spl_filesystem_object_new_ex(ce, &intern 
TSRMLS_CC);
@@ -459,6 +460,7 @@
                spl_filesystem_info_set_filename(intern, file_type, file_path, 
file_path_len, use_copy TSRMLS_CC);
        }
        
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
        return intern;
 } /* }}} */
 
@@ -671,8 +673,9 @@
        int parsed, len;
        zend_uchar path_type;
        long flags;
+       zend_error_handling error_handling;
        
-       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, NULL 
TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, 
&error_handling TSRMLS_CC);
 
        if (ctor_flags & DIT_CTOR_FLAGS) {
                flags = 
SPL_FILE_DIR_KEY_AS_PATHNAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO;
@@ -691,10 +694,12 @@
        }
 
        if (parsed == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        if (!len) {
                zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, 
"Directory name must not be empty.");
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
@@ -713,6 +718,7 @@
        }
 
        intern->u.dir.is_recursive = instanceof_function(intern->std.ce, 
spl_ce_RecursiveDirectoryIterator TSRMLS_CC) ? 1 : 0;
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -1009,16 +1015,20 @@
        zstr path;
        int path_len;
        zend_uchar path_type;
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, NULL 
TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, 
&error_handling TSRMLS_CC);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t", &path, 
&path_len, &path_type) == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
        intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() 
TSRMLS_CC);
        
        spl_filesystem_info_set_filename(intern, path_type, path, path_len, 1 
TSRMLS_CC);
+
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
        
        /* intern->type = SPL_FS_INFO; already set */
 }
@@ -1029,10 +1039,12 @@
 SPL_METHOD(SplFileInfo, func_name) \
 { \
        spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC); \
+       zend_error_handling error_handling; \
  \
-       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, NULL 
TSRMLS_CC);\
+       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, 
&error_handling TSRMLS_CC);\
        spl_filesystem_object_get_file_name(intern TSRMLS_CC); \
        php_u_stat(intern->file_name_type, intern->file_name, 
intern->file_name_len, func_num, FG(default_context), return_value TSRMLS_CC); \
+       zend_restore_error_handling(&error_handling TSRMLS_CC); \
 }
 /* }}} */
 
@@ -1119,8 +1131,9 @@
        UChar *target;
        int ret, link_len, target_len;
        char *link, buff[MAXPATHLEN];
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, NULL 
TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, 
&error_handling TSRMLS_CC);
 
        if (intern->file_name_type == IS_UNICODE) {
                php_stream_path_encode(NULL, &link, &link_len, 
intern->file_name.u, intern->file_name_len, REPORT_ERRORS, FG(default_context));
@@ -1151,6 +1164,7 @@
                        RETVAL_STRING(buff, 1);
                }
        }
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -1164,8 +1178,9 @@
        int filename_len, path_len;
        char *filename, buff[MAXPATHLEN];
        zend_bool free_filename = 0;
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, NULL 
TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, 
&error_handling TSRMLS_CC);
 
        if (intern->type == SPL_FS_DIR && !intern->file_name.v && 
intern->u.dir.entry.d_name[0]) {
                spl_filesystem_object_get_file_name(intern TSRMLS_CC);
@@ -1204,6 +1219,7 @@
        if (free_filename) {
                efree(filename);
        }
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 #endif
@@ -1224,12 +1240,15 @@
 {
        spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
        zend_class_entry *ce = spl_ce_SplFileObject;
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, 
NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, 
&error_handling TSRMLS_CC);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|C", &ce) == 
SUCCESS) {
                intern->file_class = ce;
        }
+
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -1239,12 +1258,15 @@
 {
        spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
        zend_class_entry *ce = spl_ce_SplFileInfo;
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, 
NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, 
&error_handling TSRMLS_CC);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|C", &ce) == 
SUCCESS) {
                intern->info_class = ce;
        }
+
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -1254,12 +1276,15 @@
 {
        spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
        zend_class_entry *ce = intern->info_class;
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, 
NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, 
&error_handling TSRMLS_CC);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|C", &ce) == 
SUCCESS) {
                spl_filesystem_object_create_type(ht, intern, SPL_FS_INFO, ce, 
return_value TSRMLS_CC);
        }
+
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -1269,8 +1294,9 @@
 {
        spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
        zend_class_entry *ce = intern->info_class;
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, 
NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, 
&error_handling TSRMLS_CC);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|C", &ce) == 
SUCCESS) {
                zend_uchar path_type;
@@ -1280,6 +1306,7 @@
                        spl_filesystem_object_create_info(intern, path_type, 
path, path_len, 1, ce, return_value TSRMLS_CC);
                }
        }
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -2088,8 +2115,9 @@
        zstr p1, p2;
        char *tmp_path;
        int   tmp_path_len;
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, NULL 
TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, 
&error_handling TSRMLS_CC);
 
        intern->u.file.open_mode = "r";
        intern->u.file.open_mode_len = 1;
@@ -2098,6 +2126,7 @@
                        &intern->file_name, &intern->file_name_len, 
&intern->file_name_type,
                        &intern->u.file.open_mode, 
&intern->u.file.open_mode_len, 
                        &use_include_path, &intern->u.file.zcontext) == 
FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        
@@ -2129,6 +2158,7 @@
                intern->_path_type = IS_STRING;
        }
 
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 } /* }}} */
 
 /* {{{ proto void SplTempFileObject::__construct([int max_memory]) U
@@ -2138,10 +2168,12 @@
        long max_memory = PHP_STREAM_MAX_MEM;
        char tmp_fname[48];
        spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, NULL 
TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, 
&error_handling TSRMLS_CC);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &max_memory) 
== FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
@@ -2167,6 +2199,7 @@
                intern->_path_len = 0;
                intern->_path.s = estrndup("", 0);
        }
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 } /* }}} */
 
 /* {{{ proto void SplFileObject::rewind() U
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_iterators.c?r1=1.183&r2=1.184&diff_format=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.183 
php-src/ext/spl/spl_iterators.c:1.184
--- php-src/ext/spl/spl_iterators.c:1.183       Mon Nov 17 11:26:24 2008
+++ php-src/ext/spl/spl_iterators.c     Wed Nov 19 01:59:07 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_iterators.c,v 1.183 2008/11/17 11:26:24 felipe Exp $ */
+/* $Id: spl_iterators.c,v 1.184 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -425,8 +425,9 @@
        zend_class_entry          *ce_iterator;
        long                       mode, flags;
        int                        inc_refcount = 1;
+       zend_error_handling        error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, 
NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, 
&error_handling TSRMLS_CC);
 
        switch(rit_type) {
                case RIT_RecursiveTreeIterator: {
@@ -482,6 +483,7 @@
                        zval_ptr_dtor(&iterator);
                }
                zend_throw_exception(spl_ce_InvalidArgumentException, "An 
instance of RecursiveIterator or IteratorAggregate creating it is required", 0 
TSRMLS_CC);
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
@@ -531,6 +533,7 @@
        intern->iterators[0].ce = ce_iterator;
        intern->iterators[0].state = RS_START;
 
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 
 /* {{{ proto void 
RecursiveIteratorIterator::__construct(RecursiveIterator|IteratorAggregate it 
[, int mode = RIT_LEAVES_ONLY [, int flags = 0]]) throws 
InvalidArgumentException U
@@ -1289,6 +1292,7 @@
        spl_dual_it_object   *intern;
        zend_class_entry     *ce = NULL;
        int                   inc_refcount = 1;
+       zend_error_handling   error_handling;
 
        intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() 
TSRMLS_CC);
        
@@ -1297,7 +1301,7 @@
                return NULL;
        }
 
-       zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, 
NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, 
&error_handling TSRMLS_CC);
 
        intern->dit_type = dit_type;
        switch (dit_type) {
@@ -1305,14 +1309,17 @@
                        intern->u.limit.offset = 0; /* start at beginning */
                        intern->u.limit.count = -1; /* get all */
                        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"O|ll", &zobject, ce_inner, &intern->u.limit.offset, &intern->u.limit.count) == 
FAILURE) {
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return NULL;
                        }
                        if (intern->u.limit.offset < 0) {
                                
zend_throw_exception(spl_ce_OutOfRangeException, "Parameter offset must be > 
0", 0 TSRMLS_CC);
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return NULL;
                        }
                        if (intern->u.limit.count < 0 && intern->u.limit.count 
!= -1) {
                                
zend_throw_exception(spl_ce_OutOfRangeException, "Parameter count must either 
be -1 or a value greater than or equal 0", 0 TSRMLS_CC);
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return NULL;
                        }
                        break;
@@ -1321,10 +1328,12 @@
                case DIT_RecursiveCachingIterator: {
                        long flags = CIT_CALL_TOSTRING;
                        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"O|l", &zobject, ce_inner, &flags) == FAILURE) {
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return NULL;
                        }
                        if (spl_cit_check_flags(flags) != SUCCESS) {
                                
zend_throw_exception(spl_ce_InvalidArgumentException, "Flags must contain only 
one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, 
TOSTRING_USE_CURRENT", 0 TSRMLS_CC);
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return NULL;
                        }
                        intern->u.caching.flags |= flags & CIT_PUBLIC;
@@ -1339,6 +1348,7 @@
 
                        /* UTODO: class_name must be zstr */
                        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"O|s", &zobject, ce_inner, &class_name, &class_name_len) == FAILURE) {
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return NULL;
                        }
                        ce = Z_OBJCE_P(zobject);
@@ -1349,6 +1359,7 @@
                                        || !(*pce_cast)->get_iterator
                                        ) {
                                                
zend_throw_exception(spl_ce_LogicException, "Class to downcast to not found or 
not base class or does not implement Traversable", 0 TSRMLS_CC);
+                                               
zend_restore_error_handling(&error_handling TSRMLS_CC);
                                                return NULL;
                                        }
                                        ce = *pce_cast;
@@ -1359,10 +1370,12 @@
                                                if (retval) {
                                                        zval_ptr_dtor(&retval);
                                                }
+                                               
zend_restore_error_handling(&error_handling TSRMLS_CC);
                                                return NULL;
                                        }
                                        if (!retval || Z_TYPE_P(retval) != 
IS_OBJECT || !instanceof_function(Z_OBJCE_P(retval), zend_ce_traversable 
TSRMLS_CC)) {
                                                
zend_throw_exception_ex(spl_ce_LogicException, 0 TSRMLS_CC, "%v::getIterator() 
must return an object that implememnts Traversable", ce->name);
+                                               
zend_restore_error_handling(&error_handling TSRMLS_CC);
                                                return NULL;
                                        }
                                        zobject = retval;
@@ -1376,6 +1389,7 @@
                        spl_instantiate(spl_ce_ArrayIterator, 
&intern->u.append.zarrayit, 1 TSRMLS_CC);
                        
zend_call_method_with_0_params(&intern->u.append.zarrayit, 
spl_ce_ArrayIterator, &spl_ce_ArrayIterator->constructor, "__construct", NULL);
                        intern->u.append.iterator = 
spl_ce_ArrayIterator->get_iterator(spl_ce_ArrayIterator, 
intern->u.append.zarrayit, 0 TSRMLS_CC);
+                       zend_restore_error_handling(&error_handling TSRMLS_CC);
                        return intern;
 #if HAVE_PCRE || HAVE_BUNDLED_PCRE
                case DIT_RegexIterator:
@@ -1389,10 +1403,12 @@
                        intern->u.regex.preg_flags = 0;
                        /* UTODO: do we need tocare if regex unicode? */
                        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"Os|lll", &zobject, ce_inner, &regex, &regex_len, &mode, 
&intern->u.regex.flags, &intern->u.regex.preg_flags) == FAILURE) {
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return NULL;
                        }
                        if (mode < 0 || mode >= REGIT_MODE_MAX) {
                                
zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Illegal 
mode %ld", mode);
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return NULL;
                        }
                        intern->u.regex.mode = mode;
@@ -1400,6 +1416,7 @@
                        intern->u.regex.pce = 
pcre_get_compiled_regex_cache(ZEND_STR_TYPE, regex, regex_len TSRMLS_CC);
                        if (intern->u.regex.pce == NULL) {
                                /* pcre_get_compiled_regex_cache has already 
sent error */
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return NULL;
                        }
                        intern->u.regex.pce->refcount++;
@@ -1408,12 +1425,13 @@
 #endif
                default:
                        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"O", &zobject, ce_inner) == FAILURE) {
+                               zend_restore_error_handling(&error_handling 
TSRMLS_CC);
                                return NULL;
                        }
                        break;
        }
 
-       zend_replace_error_handling(EH_THROW, NULL, NULL TSRMLS_CC);
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 
        if (inc_refcount) {
                Z_ADDREF_P(zobject);
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_observer.c?r1=1.28&r2=1.29&diff_format=u
Index: php-src/ext/spl/spl_observer.c
diff -u php-src/ext/spl/spl_observer.c:1.28 php-src/ext/spl/spl_observer.c:1.29
--- php-src/ext/spl/spl_observer.c:1.28 Mon Nov 17 11:26:24 2008
+++ php-src/ext/spl/spl_observer.c      Wed Nov 19 01:59:07 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_observer.c,v 1.28 2008/11/17 11:26:24 felipe Exp $ */
+/* $Id: spl_observer.c,v 1.29 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -605,15 +605,18 @@
 {
        spl_SplObjectStorage   *intern;
        long                    flags = MIT_NEED_ALL|MIT_KEYS_NUMERIC;
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, 
NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, 
&error_handling TSRMLS_CC);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &flags) == 
FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
        intern = (spl_SplObjectStorage*)zend_object_store_get_object(getThis() 
TSRMLS_CC);
        intern->flags = flags;
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
http://cvs.php.net/viewvc.cgi/php-src/ext/sqlite/sqlite.c?r1=1.217&r2=1.218&diff_format=u
Index: php-src/ext/sqlite/sqlite.c
diff -u php-src/ext/sqlite/sqlite.c:1.217 php-src/ext/sqlite/sqlite.c:1.218
--- php-src/ext/sqlite/sqlite.c:1.217   Mon Nov 17 11:26:24 2008
+++ php-src/ext/sqlite/sqlite.c Wed Nov 19 01:59:07 2008
@@ -17,7 +17,7 @@
    |          Marcus Boerger <[EMAIL PROTECTED]>                              |
    +----------------------------------------------------------------------+
 
-   $Id: sqlite.c,v 1.217 2008/11/17 11:26:24 felipe Exp $
+   $Id: sqlite.c,v 1.218 2008/11/19 01:59:07 colder Exp $
 */
 
 #ifdef HAVE_CONFIG_H
@@ -1546,7 +1546,7 @@
 {
        php_info_print_table_start();
        php_info_print_table_header(2, "SQLite support", "enabled");
-       php_info_print_table_row(2, "PECL Module version", 
PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c,v 1.217 2008/11/17 11:26:24 felipe 
Exp $");
+       php_info_print_table_row(2, "PECL Module version", 
PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c,v 1.218 2008/11/19 01:59:07 colder 
Exp $");
        php_info_print_table_row(2, "SQLite Library", sqlite_libversion());
        php_info_print_table_row(2, "SQLite Encoding", sqlite_libencoding());
        php_info_print_table_end();
@@ -1713,10 +1713,12 @@
        int filename_len;
        zval *errmsg = NULL;
        zval *object = getThis();
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(object ? EH_THROW : EH_NORMAL, 
sqlite_ce_exception, NULL TSRMLS_CC);
+       zend_replace_error_handling(object ? EH_THROW : EH_NORMAL, 
sqlite_ce_exception, &error_handling TSRMLS_CC);
        if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"Z|lz/", &ppfilename, &mode, &errmsg) ||
                FAILURE == php_stream_path_param_encode(ppfilename, &filename, 
&filename_len, REPORT_ERRORS, FG(default_context))) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
        if (errmsg) {
@@ -1727,6 +1729,7 @@
        if (strncmp(filename, ":memory:", sizeof(":memory:") - 1)) {
                /* resolve the fully-qualified path name to use as the hash key 
*/
                if (!(fullpath = expand_filepath(filename, NULL TSRMLS_CC))) {
+                       zend_restore_error_handling(&error_handling TSRMLS_CC);
                        if (object) {
                                RETURN_NULL();
                        } else {
@@ -1736,6 +1739,7 @@
 
                if (php_check_open_basedir(fullpath TSRMLS_CC)) {
                        efree(fullpath);
+                       zend_restore_error_handling(&error_handling TSRMLS_CC);
                        if (object) {
                                RETURN_NULL();
                        } else {
@@ -1749,6 +1753,7 @@
        if (fullpath) {
                efree(fullpath);
        }
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -1761,10 +1766,12 @@
        char *filename, *fullpath = NULL;
        int filename_len;
        zval *errmsg = NULL;
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, sqlite_ce_exception, NULL 
TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, sqlite_ce_exception, 
&error_handling TSRMLS_CC);
        if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"Z|lz/", &ppfilename, &mode, &errmsg) ||
                FAILURE == php_stream_path_param_encode(ppfilename, &filename, 
&filename_len, REPORT_ERRORS, FG(default_context))) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                RETURN_NULL();
        }
        if (errmsg) {
@@ -1775,11 +1782,13 @@
        if (strncmp(filename, ":memory:", sizeof(":memory:") - 1)) {
                /* resolve the fully-qualified path name to use as the hash key 
*/
                if (!(fullpath = expand_filepath(filename, NULL TSRMLS_CC))) {
+                       zend_restore_error_handling(&error_handling TSRMLS_CC);
                        RETURN_NULL();
                }
 
                if (php_check_open_basedir(fullpath TSRMLS_CC)) {
                        efree(fullpath);
+                       zend_restore_error_handling(&error_handling TSRMLS_CC);
                        RETURN_NULL();
                }
        }
@@ -1788,6 +1797,7 @@
        if (fullpath) {
                efree(fullpath);
        }
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
 }
 /* }}} */
 
@@ -2560,6 +2570,7 @@
        zend_replace_error_handling(object ? EH_THROW : EH_NORMAL, 
sqlite_ce_exception, &error_handling TSRMLS_CC);
        if (object) {
                if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"|tzb", &class_name, &class_name_len, &class_name_type, &ctor_params, 
&decode_binary)) {
+                       zend_restore_error_handling(&error_handling TSRMLS_CC);
                        return;
                }
                RES_FROM_OBJECT(res, object);
@@ -2570,6 +2581,7 @@
                }
        } else {
                if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"r|tzb", &zres, &class_name, &class_name_len, &class_name_type, &ctor_params, 
&decode_binary)) {
+                       zend_restore_error_handling(&error_handling TSRMLS_CC);
                        return;
                }
                ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, 
"sqlite result", le_sqlite_result);
@@ -2582,12 +2594,14 @@
 
        if (!ce) {
                zend_throw_exception_ex(sqlite_ce_exception, 0 TSRMLS_CC, 
"Could not find class '%s'", class_name);
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
        if (res->curr_row < res->nrows) {
                php_sqlite_fetch_array(res, PHPSQLITE_ASSOC, decode_binary, 1, 
&dataset TSRMLS_CC);
        } else {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                RETURN_FALSE;
        }
 
http://cvs.php.net/viewvc.cgi/php-src/ext/sqlite3/sqlite3.c?r1=1.19&r2=1.20&diff_format=u
Index: php-src/ext/sqlite3/sqlite3.c
diff -u php-src/ext/sqlite3/sqlite3.c:1.19 php-src/ext/sqlite3/sqlite3.c:1.20
--- php-src/ext/sqlite3/sqlite3.c:1.19  Tue Nov 18 14:25:54 2008
+++ php-src/ext/sqlite3/sqlite3.c       Wed Nov 19 01:59:07 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: sqlite3.c,v 1.19 2008/11/18 14:25:54 pajoye Exp $ */
+/* $Id: sqlite3.c,v 1.20 2008/11/19 01:59:07 colder Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1207,12 +1207,14 @@
        zval *db_zval;
        char *sql;
        int sql_len, errcode;
+       zend_error_handling error_handling;
 
        stmt_obj = (php_sqlite3_stmt *)zend_object_store_get_object(object 
TSRMLS_CC);
 
-       zend_replace_error_handling(EH_THROW, NULL, NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Os", &db_zval, 
php_sqlite3_sc_entry, &sql, &sql_len) == FAILURE) {
+               zend_restore_error_handling(&error_handling TSRMLS_CC);
                return;
        }
 
@@ -1220,6 +1222,7 @@
 
        SQLITE3_CHECK_INITIALIZED(db_obj->initialised, SQLite3)
 
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
        if (!sql_len) {
                RETURN_FALSE;
        }
@@ -1407,11 +1410,14 @@
        php_sqlite3_result *result_obj;
        zval *object = getThis();
        result_obj = (php_sqlite3_result *)zend_object_store_get_object(object 
TSRMLS_CC);
+       zend_error_handling error_handling;
 
-       zend_replace_error_handling(EH_THROW, NULL, NULL TSRMLS_CC);
+       zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
 
        php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLite3Result cannot be 
directly instantiated");
 
+       zend_restore_error_handling(&error_handling TSRMLS_CC);
+
 }
 /* }}} */
 

http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug46241.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/bug46241.phpt
+++ ZendEngine2/tests/bug46241.phpt
--TEST--
Bug #46241 (error handler stacks)
--FILE--
<?php

class ErrorHandling
{

    public function errorHandler1( $errno, $errstr )
    {
        echo "Caught on first level: '$errstr'\n";
        return true;
    }

    public function errorHandler2( $errno, $errstr )
    {
        echo "Caught on second level: '$errstr'\n";
        return true;
    }
}

$err = new ErrorHandling();

set_error_handler( array( $err, 'errorHandler1' ) );
set_error_handler( array( $err, 'errorHandler2' ) );

trigger_error( 'Foo', E_USER_WARNING );

function errorHandler1( $errno, $errstr )
{
    echo "Caught on first level: '$errstr'\n";
    return true;
}

function errorHandler2( $errno, $errstr )
{   
    echo "Caught on second level: '$errstr'\n";
    return true;
}

set_error_handler( 'errorHandler1' );
set_error_handler( 'errorHandler2' );

trigger_error( 'Foo', E_USER_WARNING );
?>
==END==
--EXPECT--
Caught on second level: 'Foo'
Caught on second level: 'Foo'
==END==

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to