diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2019-08-09 13:40:56 +0300 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2019-08-09 13:40:56 +0300 |
| commit | 9b973550b90101577b1ee8d027b5b689fff0e81f (patch) | |
| tree | 62909177bae1e76efba5c3773ee4eef40179b244 | |
| parent | 3b84238200fb53ae16a24865ec6b3ffaeb5c3bd8 (diff) | |
| parent | b2044cd93eb32ea44c4283e56b87ca71a8e81306 (diff) | |
| download | php-git-9b973550b90101577b1ee8d027b5b689fff0e81f.tar.gz | |
Merge branch 'PHP-7.4'
* PHP-7.4:
Added asserts to catch GC errors when refcount goes below zero.
| -rw-r--r-- | Zend/zend_gc.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c index f01ea6e2c5..7a997a485d 100644 --- a/Zend/zend_gc.c +++ b/Zend/zend_gc.c @@ -823,6 +823,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack) while (zv != end) { if (Z_REFCOUNTED_P(zv)) { ref = Z_COUNTED_P(zv); + ZEND_ASSERT(GC_REFCOUNT(ref) > 0); GC_DELREF(ref); if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { GC_REF_SET_COLOR(ref, GC_GREY); @@ -833,6 +834,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack) } if (EXPECTED(!ht)) { ref = Z_COUNTED_P(zv); + ZEND_ASSERT(GC_REFCOUNT(ref) > 0); GC_DELREF(ref); if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { GC_REF_SET_COLOR(ref, GC_GREY); @@ -853,6 +855,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack) } else if (GC_TYPE(ref) == IS_REFERENCE) { if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { ref = Z_COUNTED(((zend_reference*)ref)->val); + ZEND_ASSERT(GC_REFCOUNT(ref) > 0); GC_DELREF(ref); if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { GC_REF_SET_COLOR(ref, GC_GREY); @@ -885,6 +888,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack) } if (Z_REFCOUNTED_P(zv)) { ref = Z_COUNTED_P(zv); + ZEND_ASSERT(GC_REFCOUNT(ref) > 0); GC_DELREF(ref); if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { GC_REF_SET_COLOR(ref, GC_GREY); @@ -898,6 +902,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack) zv = Z_INDIRECT_P(zv); } ref = Z_COUNTED_P(zv); + ZEND_ASSERT(GC_REFCOUNT(ref) > 0); GC_DELREF(ref); if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { GC_REF_SET_COLOR(ref, GC_GREY); |
