bug in set_error_handler

From: Date: Wed, 14 May 2003 20:20:24 +0000
Subject: bug in set_error_handler
Groups: php.internals 
Request: Send a blank email to internals+get-1522@lists.php.net to get a copy of this message
Howdy, I hope this isn't too late to get in, but I found a problem in set_error_handler() when trying to use an object method as an error handler. I have a patch against php-4.3.1 for Zend/zend_builtin_functions.c set_error_handler was assuming that the value passed in to the function was a string, and hence the test for Z_STRLEN_PP(error_handler) was always 0 if it was called as follows set_error_handler( array(&$this, "myhandler") ); This patch makes sure the type of the var error_handler is a string before testing the length of the name. My question is, why does this block RETURN_TRUE if we set EG(user_error_handler) = NULL; ? shouldn't we return false here? Walt [root@hemna src]# diff -u php-4.3.1/Zend/zend_builtin_functions.c php-4.3.1-walt/Zend/zend_builtin_functions.c
--- php-4.3.1/Zend/zend_builtin_functions.c     2002-11-27 12:11:10.000000000 -0800
+++ php-4.3.1-walt/Zend/zend_builtin_functions.c        2003-05-14 13:15:39.000000000 -0700
@@ -891,7 +891,8 @@
       }
       ALLOC_ZVAL(EG(user_error_handler));
-       if (Z_STRLEN_PP(error_handler)==0) { /* unset user-defined handler */
+    /* Make sure we test for an empty string on a non-array value here */
+       if (Z_TYPE_PP(error_handler) == IS_STRING && Z_STRLEN_PP(error_handler)==0) { /* unset user-defined handler */
               FREE_ZVAL(EG(user_error_handler));
               EG(user_error_handler) = NULL;
               RETURN_TRUE;


« previous php.internals (#1522) next »