]> granicus.if.org Git - php/commitdiff
Removed tests that always (or almost always) true
authorDmitry Stogov <dmitry@zend.com>
Mon, 15 Apr 2019 10:18:16 +0000 (13:18 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 15 Apr 2019 10:18:16 +0000 (13:18 +0300)
Zend/zend_execute.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 4bd9d6932719927c96bc7eaccd6ff5ae77bdadcc..41a20ab4d5846fd53fc9c7f1bac7e37bc68508d5 100644 (file)
@@ -1128,6 +1128,41 @@ static zend_always_inline int zend_verify_arg_type(zend_function *zf, uint32_t a
        return 1;
 }
 
+static zend_always_inline int zend_verify_recv_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *default_value, void **cache_slot)
+{
+       zend_arg_info *cur_arg_info = &zf->common.arg_info[arg_num-1];
+       zend_class_entry *ce;
+
+       ZEND_ASSERT(arg_num <= zf->common.num_args);
+       cur_arg_info = &zf->common.arg_info[arg_num-1];
+
+       ce = NULL;
+       if (UNEXPECTED(!zend_check_type(cur_arg_info->type, arg, &ce, cache_slot, default_value, zf->common.scope, 0))) {
+               zend_verify_arg_error(zf, cur_arg_info, arg_num, ce, arg);
+               return 0;
+       }
+
+       return 1;
+}
+
+static zend_always_inline int zend_verify_variadic_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *default_value, void **cache_slot)
+{
+       zend_arg_info *cur_arg_info;
+       zend_class_entry *ce;
+
+       ZEND_ASSERT(arg_num > zf->common.num_args);
+       ZEND_ASSERT(zf->common.fn_flags & ZEND_ACC_VARIADIC);
+       cur_arg_info = &zf->common.arg_info[zf->common.num_args];
+
+       ce = NULL;
+       if (UNEXPECTED(!zend_check_type(cur_arg_info->type, arg, &ce, cache_slot, default_value, zf->common.scope, 0))) {
+               zend_verify_arg_error(zf, cur_arg_info, arg_num, ce, arg);
+               return 0;
+       }
+
+       return 1;
+}
+
 static zend_never_inline int zend_verify_internal_arg_types(zend_function *fbc, zend_execute_data *call)
 {
        uint32_t i;
index 9d6c5dd589533b3dbc1f2369c7a5f26a206983bc..a853b866538677757675aed96e81a090d028b6d0 100644 (file)
@@ -5040,11 +5040,11 @@ ZEND_VM_HOT_HANDLER(63, ZEND_RECV, NUM, UNUSED|CACHE_SLOT)
                SAVE_OPLINE();
                zend_missing_arg_error(execute_data);
                HANDLE_EXCEPTION();
-       } else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
+       } else {
                zval *param = EX_VAR(opline->result.var);
 
                SAVE_OPLINE();
-               if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) {
+               if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) {
                        HANDLE_EXCEPTION();
                }
        }
@@ -5092,7 +5092,7 @@ ZEND_VM_HOT_HANDLER(64, ZEND_RECV_INIT, NUM, CONST, CACHE_SLOT)
                zval *default_value = RT_CONSTANT(opline, opline->op2);
 
                SAVE_OPLINE();
-               if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, default_value, CACHE_ADDR(opline->extended_value)) || EG(exception))) {
+               if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, default_value, CACHE_ADDR(opline->extended_value)) || EG(exception))) {
                        HANDLE_EXCEPTION();
                }
        }
@@ -5121,7 +5121,7 @@ ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, NUM, UNUSED|CACHE_SLOT)
                        param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
                        if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
                                do {
-                                       zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num));
+                                       zend_verify_variadic_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num));
                                        if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
                                        ZEND_HASH_FILL_ADD(param);
                                        param++;
index e9810db9d1c137cb72a2f1b9b3ce1e053e9c038c..d14af785b9381aa98d558378273b31c64b8ac19d 100644 (file)
@@ -2465,7 +2465,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CON
                zval *default_value = RT_CONSTANT(opline, opline->op2);
 
                SAVE_OPLINE();
-               if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, default_value, CACHE_ADDR(opline->extended_value)) || EG(exception))) {
+               if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, default_value, CACHE_ADDR(opline->extended_value)) || EG(exception))) {
                        HANDLE_EXCEPTION();
                }
        }
@@ -2540,11 +2540,11 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_UNUSED_H
                SAVE_OPLINE();
                zend_missing_arg_error(execute_data);
                HANDLE_EXCEPTION();
-       } else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
+       } else {
                zval *param = EX_VAR(opline->result.var);
 
                SAVE_OPLINE();
-               if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) {
+               if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) {
                        HANDLE_EXCEPTION();
                }
        }
@@ -2572,7 +2572,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HAND
                        param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
                        if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
                                do {
-                                       zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num));
+                                       zend_verify_variadic_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num));
                                        if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
                                        ZEND_HASH_FILL_ADD(param);
                                        param++;