Skip to content

Commit b2044cd

Browse files
committed
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Added asserts to catch GC errors when refcount goes below zero.
2 parents 5c8124d + 21a0a28 commit b2044cd

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

Zend/zend_gc.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
827827
while (zv != end) {
828828
if (Z_REFCOUNTED_P(zv)) {
829829
ref = Z_COUNTED_P(zv);
830+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
830831
GC_DELREF(ref);
831832
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
832833
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -837,6 +838,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
837838
}
838839
if (EXPECTED(!ht)) {
839840
ref = Z_COUNTED_P(zv);
841+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
840842
GC_DELREF(ref);
841843
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
842844
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -857,6 +859,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
857859
} else if (GC_TYPE(ref) == IS_REFERENCE) {
858860
if (Z_REFCOUNTED(((zend_reference*)ref)->val)) {
859861
ref = Z_COUNTED(((zend_reference*)ref)->val);
862+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
860863
GC_DELREF(ref);
861864
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
862865
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -889,6 +892,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
889892
}
890893
if (Z_REFCOUNTED_P(zv)) {
891894
ref = Z_COUNTED_P(zv);
895+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
892896
GC_DELREF(ref);
893897
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
894898
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -902,6 +906,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
902906
zv = Z_INDIRECT_P(zv);
903907
}
904908
ref = Z_COUNTED_P(zv);
909+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
905910
GC_DELREF(ref);
906911
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
907912
GC_REF_SET_COLOR(ref, GC_GREY);

0 commit comments

Comments
 (0)