]> granicus.if.org Git - php/commitdiff
Error handler isn't properly restored when using fetchObject() with SQLite
authorScott MacVicar <scottmac@php.net>
Sat, 22 Nov 2008 11:48:38 +0000 (11:48 +0000)
committerScott MacVicar <scottmac@php.net>
Sat, 22 Nov 2008 11:48:38 +0000 (11:48 +0000)
ext/sqlite/sqlite.c

index fef7d48ef56b5d7824913612b72c76e19b997410..927dafe96b5af8276dec3ef2ee6fdd41a3d02f0b 100644 (file)
@@ -160,16 +160,20 @@ PHP_INI_END()
                } \
        }
 
-#define RES_FROM_OBJECT(res, object) \
+#define RES_FROM_OBJECT_RESTORE_ERH(res, object, error_handling) \
        { \
                sqlite_object *obj = (sqlite_object*) zend_object_store_get_object(object TSRMLS_CC); \
                res = obj->u.res; \
                if (!res) { \
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "No result set available"); \
+                       if (error_handling) \
+                               zend_restore_error_handling(error_handling TSRMLS_CC); \
                        RETURN_NULL(); \
                } \
        }
 
+#define RES_FROM_OBJECT(res, object) RES_FROM_OBJECT_RESTORE_ERH(res, object, NULL)
+
 #define PHP_SQLITE_EMPTY_QUERY \
        if (!sql_len) { \
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot execute empty query"); \
@@ -2573,7 +2577,7 @@ PHP_FUNCTION(sqlite_fetch_object)
                        zend_restore_error_handling(&error_handling TSRMLS_CC);
                        return;
                }
-               RES_FROM_OBJECT(res, object);
+               RES_FROM_OBJECT_RESTORE_ERH(res, object, &error_handling);
                if (!ZEND_NUM_ARGS()) {
                        ce = zend_standard_class_def;
                } else {