com php-src: More accurate zval comparison: Zend/zend_API.c

From: Date: Wed, 19 Mar 2014 18:43:36 +0000
Subject: com php-src: More accurate zval comparison: Zend/zend_API.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-77595@lists.php.net to get a copy of this message
Commit: acc719766d5bd0dfcceaa310289654f98d020c91 Author: Dmitry Stogov <dmitry@zend.com> Wed, 19 Mar 2014 22:43:36 +0400 Parents: e884d5d8e34a4349c2a3243832cf3379deed3cae Branches: phpng Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=acc719766d5bd0dfcceaa310289654f98d020c91 Log: More accurate zval comparison Changed paths: M Zend/zend_API.c Diff: diff --git a/Zend/zend_API..c b/Zend/zend_API.c index a9c10b6..e9d3081 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -3931,12 +3931,37 @@ ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, } /* }}} */ +static int same_zval(zval *zv1, zval *zv2) /* {{{ */ +{ + if (Z_TYPE_P(zv1) != Z_TYPE_P(zv2)) { + return 0; + } + switch (Z_TYPE_P(zv1)) { + case IS_UNDEF: + case IS_NULL: + return 1; + case IS_BOOL: + case IS_LONG: + return Z_LVAL_P(zv1) == Z_LVAL_P(zv2); + case IS_DOUBLE: + return Z_LVAL_P(zv1) == Z_LVAL_P(zv2); + case IS_STRING: + case IS_ARRAY: + case IS_OBJECT: + case IS_RESOURCE: + return Z_COUNTED_P(zv1) == Z_COUNTED_P(zv2); + default: + return 0; + } +} +/* }}} */ + ZEND_API void zend_restore_error_handling(zend_error_handling *saved TSRMLS_DC) /* {{{ */ { EG(error_handling) = saved->handling; EG(exception_class) = saved->handling == EH_THROW ? saved->exception : NULL; if (Z_TYPE(saved->user_handler) != IS_UNDEF - && memcmp(&saved->user_handler, &EG(user_error_handler), sizeof(zval)) != 0) { + && !same_zval(&saved->user_handler, &EG(user_error_handler))) { zval_ptr_dtor(&EG(user_error_handler)); ZVAL_COPY_VALUE(&EG(user_error_handler), &saved->user_handler); } else if (Z_TYPE(saved->user_handler)) {

« previous php.cvs (#77595) next »