Skip to content

Commit 21a0a28

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

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
@@ -829,6 +829,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
829829
while (zv != end) {
830830
if (Z_REFCOUNTED_P(zv)) {
831831
ref = Z_COUNTED_P(zv);
832+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
832833
GC_DELREF(ref);
833834
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
834835
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -839,6 +840,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
839840
}
840841
if (EXPECTED(!ht)) {
841842
ref = Z_COUNTED_P(zv);
843+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
842844
GC_DELREF(ref);
843845
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
844846
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -859,6 +861,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
859861
} else if (GC_TYPE(ref) == IS_REFERENCE) {
860862
if (Z_REFCOUNTED(((zend_reference*)ref)->val)) {
861863
ref = Z_COUNTED(((zend_reference*)ref)->val);
864+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
862865
GC_DELREF(ref);
863866
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
864867
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -891,6 +894,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
891894
}
892895
if (Z_REFCOUNTED_P(zv)) {
893896
ref = Z_COUNTED_P(zv);
897+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
894898
GC_DELREF(ref);
895899
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
896900
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -904,6 +908,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
904908
zv = Z_INDIRECT_P(zv);
905909
}
906910
ref = Z_COUNTED_P(zv);
911+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
907912
GC_DELREF(ref);
908913
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
909914
GC_REF_SET_COLOR(ref, GC_GREY);

0 commit comments

Comments
 (0)