com php-src: Fixed segfault in Zend/tests/008.phpt: Zend/zend_gc.h Zend/zend_objects_API.c
| From: | Dmitry Stogov | Date: | Thu, 20 Feb 2014 08:21:41 +0000 |
| Subject: | com php-src: Fixed segfault in Zend/tests/008.phpt: Zend/zend_gc.h Zend/zend_objects_API.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-78042@lists.php.net to get a copy of this message | ||
Commit: cc15eb500ed9c47412b41ee461cf7b4f00701ead
Author: Xinchen Hui <laruence@gmail.com> Thu, 20 Feb 2014 16:21:41 +0800
Parents: b917458490ece8d418caee5b6e43db9f7567cb72
Branches: phpng
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=cc15eb500ed9c47412b41ee461cf7b4f00701ead
Log:
Fixed segfault in Zend/tests/008.phpt
Changed paths:
M Zend/zend_gc.h
M Zend/zend_objects_API.c
Diff:
diff --git a/Zend/zend_gc.h b/Zend/zend_gc.h
index 2f3a399..f714033 100644
--- a/Zend/zend_gc.h
+++ b/Zend/zend_gc.h
@@ -140,6 +140,12 @@ END_EXTERN_C()
} \
} while (0)
+#define GC_REMOVE_ZOBJ_FROM_BUFFER(z) do { \
+ if (GC_ADDRESS((z)->gc.u.v.buffer)) { \
+ gc_remove_zval_from_buffer(&(z)->gc TSRMLS_CC); \
+ } \
+ } while (0)
+
static zend_always_inline void gc_zval_check_possible_root(zval *z TSRMLS_DC)
{
if (Z_TYPE_P(z) == IS_ARRAY || Z_TYPE_P(z) == IS_OBJECT) {
diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c
index 5bef2d4..8e406ec 100644
--- a/Zend/zend_objects_API.c
+++ b/Zend/zend_objects_API.c
@@ -55,7 +55,7 @@ ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects TS
obj->gc.refcount--;
if (obj->gc.refcount == 0) {
- gc_remove_zval_from_buffer((zend_refcounted*)obj TSRMLS_CC);
+ GC_REMOVE_ZOBJ_FROM_BUFFER(obj TSRMLS_CC);
}
}
}
@@ -86,7 +86,7 @@ ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects
zend_object *obj = objects->object_buckets[i];
if (IS_VALID(obj)) {
- gc_remove_zval_from_buffer((zend_refcounted*)obj TSRMLS_CC);
+ GC_REMOVE_ZOBJ_FROM_BUFFER(obj TSRMLS_CC);
objects->object_buckets[i] = SET_INVALID(obj);
if (obj->handlers->free_obj) {
obj->handlers->free_obj(obj TSRMLS_CC);