Skip to content

Commit 9b97355

Browse files
committed
Merge branch 'PHP-7.4'
* PHP-7.4: Added asserts to catch GC errors when refcount goes below zero.
2 parents 3b84238 + b2044cd commit 9b97355

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
@@ -823,6 +823,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
823823
while (zv != end) {
824824
if (Z_REFCOUNTED_P(zv)) {
825825
ref = Z_COUNTED_P(zv);
826+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
826827
GC_DELREF(ref);
827828
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
828829
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -833,6 +834,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
833834
}
834835
if (EXPECTED(!ht)) {
835836
ref = Z_COUNTED_P(zv);
837+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
836838
GC_DELREF(ref);
837839
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
838840
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -853,6 +855,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
853855
} else if (GC_TYPE(ref) == IS_REFERENCE) {
854856
if (Z_REFCOUNTED(((zend_reference*)ref)->val)) {
855857
ref = Z_COUNTED(((zend_reference*)ref)->val);
858+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
856859
GC_DELREF(ref);
857860
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
858861
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -885,6 +888,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
885888
}
886889
if (Z_REFCOUNTED_P(zv)) {
887890
ref = Z_COUNTED_P(zv);
891+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
888892
GC_DELREF(ref);
889893
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
890894
GC_REF_SET_COLOR(ref, GC_GREY);
@@ -898,6 +902,7 @@ static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack)
898902
zv = Z_INDIRECT_P(zv);
899903
}
900904
ref = Z_COUNTED_P(zv);
905+
ZEND_ASSERT(GC_REFCOUNT(ref) > 0);
901906
GC_DELREF(ref);
902907
if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) {
903908
GC_REF_SET_COLOR(ref, GC_GREY);

0 commit comments

Comments
 (0)