]> granicus.if.org Git - php/commitdiff
Fixed assertions
authorDmitry Stogov <dmitry@zend.com>
Fri, 21 Feb 2014 16:35:40 +0000 (20:35 +0400)
committerDmitry Stogov <dmitry@zend.com>
Fri, 21 Feb 2014 16:35:40 +0000 (20:35 +0400)
Zend/zend_compile.c
Zend/zend_execute.c
Zend/zend_execute_API.c
Zend/zend_object_handlers.c
Zend/zend_operators.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
ext/spl/php_spl.c
ext/standard/type.c
ext/standard/var.c

index c8c7b90adb92b3836744d0d9e189e64cd9111f63..9219e2859a428c3dcff3e9f5ac8f1e10f3db3b56 100644 (file)
@@ -4460,7 +4460,7 @@ static void zend_do_traits_property_binding(zend_class_entry *ce TSRMLS_DC) /* {
                        } else {
                                prop_value = &ce->traits[i]->default_properties_table[property_info->offset];
                        }
-                       Z_ADDREF_P(prop_value);
+                       if (Z_REFCOUNTED_P(prop_value)) Z_ADDREF_P(prop_value);
 
 //???                  doc_comment = property_info->doc_comment ? STR_DUP(property_info->doc_comment, 0) : NULL;
                        zend_declare_property_ex(ce, prop_name,
index 21efb7fdd2a02044fae383d91a5c7ed110b464d2..d02a039ab2d31c5929fdd69052ecde8ebf6f032a 100644 (file)
@@ -110,7 +110,7 @@ static zend_always_inline void zend_pzval_unlock_free_func(zval *z TSRMLS_DC)
 #define PZVAL_UNLOCK(z, f) zend_pzval_unlock_func(z, f, 1 TSRMLS_CC)
 #define PZVAL_UNLOCK_EX(z, f, u) zend_pzval_unlock_func(z, f, u TSRMLS_CC)
 #define PZVAL_UNLOCK_FREE(z) zend_pzval_unlock_free_func(z TSRMLS_CC)
-#define PZVAL_LOCK(z) Z_ADDREF_P((z))
+#define PZVAL_LOCK(z) if (Z_REFCOUNTED_P(z)) Z_ADDREF_P((z))
 #define SELECTIVE_PZVAL_LOCK(pzv, opline)      if (RETURN_VALUE_USED(opline)) { PZVAL_LOCK(pzv); }
 
 #define EXTRACT_ZVAL_PTR(t) do {                               \
index e0dede14f5528c2cb8cb9ec2868e327a574cb134..dd27e65656b6ad856c3dba7a32c3fd5a9250dad1 100644 (file)
@@ -1582,8 +1582,10 @@ typedef struct _zend_abstract_info {
        int ctor;
 } zend_abstract_info;
 
-static int zend_verify_abstract_class_function(zend_function *fn, zend_abstract_info *ai TSRMLS_DC) /* {{{ */
+static int zend_verify_abstract_class_function(zval *zv, zend_abstract_info *ai TSRMLS_DC) /* {{{ */
 {
+       zend_function *fn = Z_PTR_P(zv);
+
        if (fn->common.fn_flags & ZEND_ACC_ABSTRACT) {
                if (ai->cnt < MAX_ABSTRACT_INFO_CNT) {
                        ai->afn[ai->cnt] = fn;
index 9029f45cc43af610c7af52a610ccb6940d363bfc..fea71d644a4af37f79aa2e2f6d788c5b52d42332 100644 (file)
@@ -180,7 +180,7 @@ static int zend_std_call_setter(zval *object, zval *member, zval *value TSRMLS_D
        zend_class_entry *ce = Z_OBJCE_P(object);
 
        SEPARATE_ARG_IF_REF(member);
-       Z_ADDREF_P(value);
+       if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
 
        /* __set handler is called with two arguments:
             property name
@@ -664,7 +664,7 @@ zval *zend_std_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) /*
                }
 
                /* Undo PZVAL_LOCK() */
-               Z_DELREF(retval);
+               if (Z_REFCOUNTED(retval)) Z_DELREF(retval);
 
                // TODO: FIXME???
                //???return &retval;
index 4edd202bfc9eab027ba153f4a35f5179a5cfe964..8ead9201edcb4beb36720eb01debf451d5aadfc9 100644 (file)
@@ -1509,11 +1509,13 @@ ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_
 
 static inline void zend_free_obj_get_result(zval *op TSRMLS_DC) /* {{{ */
 {
-       if (Z_REFCOUNT_P(op) == 0) {
-               GC_REMOVE_ZVAL_FROM_BUFFER(op);
-               zval_dtor(op);
-       } else {
-               zval_ptr_dtor(op);
+       if (Z_REFCOUNTED_P(op)) {
+               if (Z_REFCOUNT_P(op) == 0) {
+                       GC_REMOVE_ZVAL_FROM_BUFFER(op);
+                       zval_dtor(op);
+               } else {
+                       zval_ptr_dtor(op);
+               }
        }
 }
 /* }}} */
index b599f22d6071943f6dd355dc02d20ba89b586259..b4141c99ab7158c636115621691ad95c001869c7 100644 (file)
@@ -1361,9 +1361,9 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -4132,7 +4132,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET, CONST|TMP|VAR|CV, ANY)
                                        ZVAL_NEW_REF(array_ptr, array_ptr);
                                }
                        }
-                       Z_ADDREF_P(array_ptr);
+                       if (Z_REFCOUNTED_P(array_ptr)) Z_ADDREF_P(array_ptr);
                }
        } else {
                array_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
@@ -4154,22 +4154,24 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET, CONST|TMP|VAR|CV, ANY)
                                        Z_ADDREF_P(array_ptr);
                                }
                        }
-               } else if (OP1_TYPE == IS_CONST ||
-                          (OP1_TYPE == IS_CV && 
-                           !Z_ISREF_P(array_ptr) &&
-                           Z_REFCOUNT_P(array_ptr) > 1) ||
-                          (OP1_TYPE == IS_VAR &&
-                           !Z_ISREF_P(array_ptr) &&
-                           Z_REFCOUNT_P(array_ptr) > 2)) {
-                       zval tmp;
-
-                       if (OP1_TYPE == IS_VAR) {
-                               Z_DELREF_P(array_ptr);
+               } else if (Z_REFCOUNTED_P(array_ptr)) {
+                       if (OP1_TYPE == IS_CONST ||
+                                  (OP1_TYPE == IS_CV && 
+                                   !Z_ISREF_P(array_ptr) &&
+                                   Z_REFCOUNT_P(array_ptr) > 1) ||
+                                  (OP1_TYPE == IS_VAR &&
+                                   !Z_ISREF_P(array_ptr) &&
+                                   Z_REFCOUNT_P(array_ptr) > 2)) {
+                               zval tmp;
+
+                               if (OP1_TYPE == IS_VAR) {
+                                       Z_DELREF_P(array_ptr);
+                               }
+                               ZVAL_DUP(&tmp, array_ptr);
+                               array_ptr = &tmp;
+                       } else if (OP1_TYPE == IS_CV) {
+                               Z_ADDREF_P(array_ptr);
                        }
-                       ZVAL_DUP(&tmp, array_ptr);
-                       array_ptr = &tmp;
-               } else if (OP1_TYPE == IS_CV) {
-                       Z_ADDREF_P(array_ptr);
                }
        }
 
index 1ae8f24dacafd601316a5523d6ce8ecaf78f18bb..b996805afa1e661f2da19d101e38f9ac1375d329 100644 (file)
@@ -2976,7 +2976,7 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
                                        ZVAL_NEW_REF(array_ptr, array_ptr);
                                }
                        }
-                       Z_ADDREF_P(array_ptr);
+                       if (Z_REFCOUNTED_P(array_ptr)) Z_ADDREF_P(array_ptr);
                }
        } else {
                array_ptr = opline->op1.zv;
@@ -2998,22 +2998,24 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
                                        Z_ADDREF_P(array_ptr);
                                }
                        }
-               } else if (IS_CONST == IS_CONST ||
-                          (IS_CONST == IS_CV &&
-                           !Z_ISREF_P(array_ptr) &&
-                           Z_REFCOUNT_P(array_ptr) > 1) ||
-                          (IS_CONST == IS_VAR &&
-                           !Z_ISREF_P(array_ptr) &&
-                           Z_REFCOUNT_P(array_ptr) > 2)) {
-                       zval tmp;
+               } else if (Z_REFCOUNTED_P(array_ptr)) {
+                       if (IS_CONST == IS_CONST ||
+                                  (IS_CONST == IS_CV &&
+                                   !Z_ISREF_P(array_ptr) &&
+                                   Z_REFCOUNT_P(array_ptr) > 1) ||
+                                  (IS_CONST == IS_VAR &&
+                                   !Z_ISREF_P(array_ptr) &&
+                                   Z_REFCOUNT_P(array_ptr) > 2)) {
+                               zval tmp;
 
-                       if (IS_CONST == IS_VAR) {
-                               Z_DELREF_P(array_ptr);
+                               if (IS_CONST == IS_VAR) {
+                                       Z_DELREF_P(array_ptr);
+                               }
+                               ZVAL_DUP(&tmp, array_ptr);
+                               array_ptr = &tmp;
+                       } else if (IS_CONST == IS_CV) {
+                               Z_ADDREF_P(array_ptr);
                        }
-                       ZVAL_DUP(&tmp, array_ptr);
-                       array_ptr = &tmp;
-               } else if (IS_CONST == IS_CV) {
-                       Z_ADDREF_P(array_ptr);
                }
        }
 
@@ -7971,7 +7973,7 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
                                        ZVAL_NEW_REF(array_ptr, array_ptr);
                                }
                        }
-                       Z_ADDREF_P(array_ptr);
+                       if (Z_REFCOUNTED_P(array_ptr)) Z_ADDREF_P(array_ptr);
                }
        } else {
                array_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -7993,22 +7995,24 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
                                        Z_ADDREF_P(array_ptr);
                                }
                        }
-               } else if (IS_TMP_VAR == IS_CONST ||
-                          (IS_TMP_VAR == IS_CV &&
-                           !Z_ISREF_P(array_ptr) &&
-                           Z_REFCOUNT_P(array_ptr) > 1) ||
-                          (IS_TMP_VAR == IS_VAR &&
-                           !Z_ISREF_P(array_ptr) &&
-                           Z_REFCOUNT_P(array_ptr) > 2)) {
-                       zval tmp;
+               } else if (Z_REFCOUNTED_P(array_ptr)) {
+                       if (IS_TMP_VAR == IS_CONST ||
+                                  (IS_TMP_VAR == IS_CV &&
+                                   !Z_ISREF_P(array_ptr) &&
+                                   Z_REFCOUNT_P(array_ptr) > 1) ||
+                                  (IS_TMP_VAR == IS_VAR &&
+                                   !Z_ISREF_P(array_ptr) &&
+                                   Z_REFCOUNT_P(array_ptr) > 2)) {
+                               zval tmp;
 
-                       if (IS_TMP_VAR == IS_VAR) {
-                               Z_DELREF_P(array_ptr);
+                               if (IS_TMP_VAR == IS_VAR) {
+                                       Z_DELREF_P(array_ptr);
+                               }
+                               ZVAL_DUP(&tmp, array_ptr);
+                               array_ptr = &tmp;
+                       } else if (IS_TMP_VAR == IS_CV) {
+                               Z_ADDREF_P(array_ptr);
                        }
-                       ZVAL_DUP(&tmp, array_ptr);
-                       array_ptr = &tmp;
-               } else if (IS_TMP_VAR == IS_CV) {
-                       Z_ADDREF_P(array_ptr);
                }
        }
 
@@ -13000,7 +13004,7 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                                        ZVAL_NEW_REF(array_ptr, array_ptr);
                                }
                        }
-                       Z_ADDREF_P(array_ptr);
+                       if (Z_REFCOUNTED_P(array_ptr)) Z_ADDREF_P(array_ptr);
                }
        } else {
                array_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -13022,22 +13026,24 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                                        Z_ADDREF_P(array_ptr);
                                }
                        }
-               } else if (IS_VAR == IS_CONST ||
-                          (IS_VAR == IS_CV &&
-                           !Z_ISREF_P(array_ptr) &&
-                           Z_REFCOUNT_P(array_ptr) > 1) ||
-                          (IS_VAR == IS_VAR &&
-                           !Z_ISREF_P(array_ptr) &&
-                           Z_REFCOUNT_P(array_ptr) > 2)) {
-                       zval tmp;
+               } else if (Z_REFCOUNTED_P(array_ptr)) {
+                       if (IS_VAR == IS_CONST ||
+                                  (IS_VAR == IS_CV &&
+                                   !Z_ISREF_P(array_ptr) &&
+                                   Z_REFCOUNT_P(array_ptr) > 1) ||
+                                  (IS_VAR == IS_VAR &&
+                                   !Z_ISREF_P(array_ptr) &&
+                                   Z_REFCOUNT_P(array_ptr) > 2)) {
+                               zval tmp;
 
-                       if (IS_VAR == IS_VAR) {
-                               Z_DELREF_P(array_ptr);
+                               if (IS_VAR == IS_VAR) {
+                                       Z_DELREF_P(array_ptr);
+                               }
+                               ZVAL_DUP(&tmp, array_ptr);
+                               array_ptr = &tmp;
+                       } else if (IS_VAR == IS_CV) {
+                               Z_ADDREF_P(array_ptr);
                        }
-                       ZVAL_DUP(&tmp, array_ptr);
-                       array_ptr = &tmp;
-               } else if (IS_VAR == IS_CV) {
-                       Z_ADDREF_P(array_ptr);
                }
        }
 
@@ -14495,9 +14501,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HA
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -16715,9 +16721,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAND
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -18843,9 +18849,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAND
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -22106,9 +22112,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDL
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -23773,9 +23779,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -25110,9 +25116,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_H
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -26363,9 +26369,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_H
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -28015,9 +28021,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HA
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -29654,7 +29660,7 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                                        ZVAL_NEW_REF(array_ptr, array_ptr);
                                }
                        }
-                       Z_ADDREF_P(array_ptr);
+                       if (Z_REFCOUNTED_P(array_ptr)) Z_ADDREF_P(array_ptr);
                }
        } else {
                array_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
@@ -29676,22 +29682,24 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                                        Z_ADDREF_P(array_ptr);
                                }
                        }
-               } else if (IS_CV == IS_CONST ||
-                          (IS_CV == IS_CV &&
-                           !Z_ISREF_P(array_ptr) &&
-                           Z_REFCOUNT_P(array_ptr) > 1) ||
-                          (IS_CV == IS_VAR &&
-                           !Z_ISREF_P(array_ptr) &&
-                           Z_REFCOUNT_P(array_ptr) > 2)) {
-                       zval tmp;
+               } else if (Z_REFCOUNTED_P(array_ptr)) {
+                       if (IS_CV == IS_CONST ||
+                                  (IS_CV == IS_CV &&
+                                   !Z_ISREF_P(array_ptr) &&
+                                   Z_REFCOUNT_P(array_ptr) > 1) ||
+                                  (IS_CV == IS_VAR &&
+                                   !Z_ISREF_P(array_ptr) &&
+                                   Z_REFCOUNT_P(array_ptr) > 2)) {
+                               zval tmp;
 
-                       if (IS_CV == IS_VAR) {
-                               Z_DELREF_P(array_ptr);
+                               if (IS_CV == IS_VAR) {
+                                       Z_DELREF_P(array_ptr);
+                               }
+                               ZVAL_DUP(&tmp, array_ptr);
+                               array_ptr = &tmp;
+                       } else if (IS_CV == IS_CV) {
+                               Z_ADDREF_P(array_ptr);
                        }
-                       ZVAL_DUP(&tmp, array_ptr);
-                       array_ptr = &tmp;
-               } else if (IS_CV == IS_CV) {
-                       Z_ADDREF_P(array_ptr);
                }
        }
 
@@ -31014,9 +31022,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HAN
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -33015,9 +33023,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDL
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -35017,9 +35025,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDL
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
@@ -38022,9 +38030,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLE
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                zval *retval_ptr = EX_VAR(opline->result.var);
 
-               Z_DELREF_P(retval_ptr);
+//???          Z_DELREF_P(retval_ptr);
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-               Z_ADDREF_P(retval_ptr);
+//???          Z_ADDREF_P(retval_ptr);
 //???          EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
 //???          EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
        }
index 238b7574a0a4a76b6d90eda771b82e4bec17ca68..90d4e2f054ff19d59681f765a5f94b3bab2b83a9 100644 (file)
@@ -414,7 +414,7 @@ PHP_FUNCTION(spl_autoload_call)
        HashPosition function_pos;
        autoload_func_info *alfi;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &class_name) == FAILURE || Z_TYPE_P(class_name) != IS_STRING) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &class_name) == FAILURE || Z_TYPE_P(class_name) != IS_STRING) {
                return;
        }
 
@@ -617,7 +617,7 @@ PHP_FUNCTION(spl_autoload_register)
                        HT_MOVE_TAIL_TO_HEAD(SPL_G(autoload_functions));
                }
 skip:
-               STR_FREE(lc_name);
+               STR_RELEASE(lc_name);
        }
 
        if (SPL_G(autoload_functions)) {
index 4488d4f1ae4b334382257a617074b7096fdbcc03..facb1bad0255e70569db7173cf393df4e7bc2c2d 100644 (file)
@@ -133,20 +133,20 @@ PHP_FUNCTION(settype)
    Get the integer value of a variable using the optional base for the conversion */
 PHP_FUNCTION(intval)
 {
-       zval **num;
+       zval *num;
        long arg_base;
        int base;
 
        switch (ZEND_NUM_ARGS()) {
                case 1:
-                       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &num) == FAILURE) {
+                       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &num) == FAILURE) {
                                return;
                        }
                        base = 10;
                        break;
 
                case 2:
-                       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zl", &num, &arg_base) == FAILURE) {
+                       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zl", &num, &arg_base) == FAILURE) {
                                return;
                        }
                        base = arg_base;
@@ -156,7 +156,7 @@ PHP_FUNCTION(intval)
                        WRONG_PARAM_COUNT;
        }
 
-       RETVAL_ZVAL(*num, 1, 0);
+       RETVAL_ZVAL(num, 1, 0);
        convert_to_long_base(return_value, base);
 }
 /* }}} */
@@ -165,13 +165,13 @@ PHP_FUNCTION(intval)
    Get the float value of a variable */
 PHP_FUNCTION(floatval)
 {
-       zval **num;
+       zval *num;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &num) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &num) == FAILURE) {
                return;
        }
 
-       RETVAL_ZVAL(*num, 1, 0);
+       RETVAL_ZVAL(num, 1, 0);
        convert_to_double(return_value);
 }
 /* }}} */
@@ -180,13 +180,13 @@ PHP_FUNCTION(floatval)
    Get the boolean value of a variable */
 PHP_FUNCTION(boolval)
 {
-       zval **val;
+       zval *val;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &val) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &val) == FAILURE) {
                return;
        }
 
-       RETURN_BOOL(zend_is_true(*val TSRMLS_CC));
+       RETURN_BOOL(zend_is_true(val TSRMLS_CC));
 }
 /* }}} */
 
@@ -194,20 +194,20 @@ PHP_FUNCTION(boolval)
    Get the string value of a variable */
 PHP_FUNCTION(strval)
 {
-       zval **num, *tmp;
+       zval *num, *tmp;
        zval expr_copy;
        int use_copy;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &num) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &num) == FAILURE) {
                return;
        }
 
-       zend_make_printable_zval(*num, &expr_copy, &use_copy);
+       zend_make_printable_zval(num, &expr_copy, &use_copy);
        if (use_copy) {
                tmp = &expr_copy;
                RETVAL_ZVAL(tmp, 0, 0);
        } else {
-               RETVAL_ZVAL(*num, 1, 0);
+               RETVAL_ZVAL(num, 1, 0);
        }
 }
 /* }}} */
index 1e2b85c0555ebc3e770ccdb2ccd2da72b50d01ea..2ce76cced147becabf81632201dc5a650b29d9ac 100644 (file)
@@ -251,21 +251,21 @@ PHPAPI void php_debug_zval_dump(zval *struc, int level TSRMLS_DC) /* {{{ */
 
        switch (Z_TYPE_P(struc)) {
        case IS_BOOL:
-               php_printf("%sbool(%s) refcount(%u)\n", COMMON, Z_LVAL_P(struc)?"true":"false", Z_REFCOUNT_P(struc));
+               php_printf("%sbool(%s)\n", COMMON, Z_LVAL_P(struc)?"true":"false");
                break;
        case IS_NULL:
-               php_printf("%sNULL refcount(%u)\n", COMMON, Z_REFCOUNT_P(struc));
+               php_printf("%sNULL\n", COMMON);
                break;
        case IS_LONG:
-               php_printf("%slong(%ld) refcount(%u)\n", COMMON, Z_LVAL_P(struc), Z_REFCOUNT_P(struc));
+               php_printf("%slong(%ld)\n", COMMON, Z_LVAL_P(struc));
                break;
        case IS_DOUBLE:
-               php_printf("%sdouble(%.*G) refcount(%u)\n", COMMON, (int) EG(precision), Z_DVAL_P(struc), Z_REFCOUNT_P(struc));
+               php_printf("%sdouble(%.*G)\n", COMMON, (int) EG(precision), Z_DVAL_P(struc));
                break;
        case IS_STRING:
                php_printf("%sstring(%d) \"", COMMON, Z_STRLEN_P(struc));
                PHPWRITE(Z_STRVAL_P(struc), Z_STRLEN_P(struc));
-               php_printf("\" refcount(%u)\n", Z_REFCOUNT_P(struc));
+               php_printf("\" refcount(%u)\n", IS_INTERNED(Z_STR_P(struc)) ? 1 : Z_REFCOUNT_P(struc));
                break;
        case IS_ARRAY:
                myht = Z_ARRVAL_P(struc);