cvs: ZendEngine2 / zend_execute_API.c
| From: | Marcus Boerger | Date: | Thu, 11 Dec 2003 18:18:52 +0000 |
| Subject: | cvs: ZendEngine2 / zend_execute_API.c | ||
| Groups: | php.zend-engine.cvs | ||
| Request: | Send a blank email to php-zend-engine-cvs+get-2097@lists.php.net to get a copy of this message | ||
helly Thu Dec 11 13:18:52 2003 EDT
Modified files:
/ZendEngine2 zend_execute_API.c
Log:
Bugfix: #26591 [NEW]: "__autoload threw an exception" during an uncaught
Exception
Index: ZendEngine2/zend_execute_API.c
diff -u ZendEngine2/zend_execute_API.c:1.242 ZendEngine2/zend_execute_API.c:1.243
--- ZendEngine2/zend_execute_API.c:1.242 Wed Dec 10 05:24:35 2003
+++ ZendEngine2/zend_execute_API.c Thu Dec 11 13:18:52 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_execute_API.c,v 1.242 2003/12/10 10:24:35 helly Exp $ */
+/* $Id: zend_execute_API.c,v 1.243 2003/12/11 18:18:52 helly Exp $ */
#include <stdio.h>
#include <signal.h>
@@ -781,6 +781,7 @@
zval *retval_ptr;
int retval;
char *lc_name;
+ zval *exception;
lc_name = do_alloca(name_length + 1);
zend_str_tolower_copy(lc_name, name, name_length+1);
@@ -797,17 +798,22 @@
args[0] = &class_name_ptr;
+ exception = EG(exception);
+ EG(exception) = NULL;
retval = call_user_function_ex(EG(function_table), NULL, &autoload_function, &retval_ptr,
1, args, 0, NULL TSRMLS_CC);
if (retval == FAILURE) {
+ EG(exception) = exception;
free_alloca(lc_name);
return FAILURE;
}
if (EG(exception)) {
free_alloca(lc_name);
- zend_error(E_ERROR, "__autoload threw an exception");
+ zend_error(E_ERROR, "__autoload(%s) threw an exception of type '%s'", name,
Z_OBJCE_P(EG(exception))->name);
+ return FAILURE;
}
+ EG(exception) = exception;
/* If an exception is thrown retval_ptr will be NULL but we bailout before we reach this point */
zval_ptr_dtor(&retval_ptr);