]> granicus.if.org Git - php/commitdiff
Avoid recording of uninitialized types.
authorDmitry Stogov <dmitry@zend.com>
Thu, 28 May 2020 11:39:41 +0000 (14:39 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 28 May 2020 11:39:41 +0000 (14:39 +0300)
VM doesn't set Z_TYPE() for IS_VAR when passes class_entry reference.

ext/opcache/jit/zend_jit_vm_helpers.c

index 54fa6d21fd531bae84e030a9a95119475aa1981f..cdc2f66ff11000d2e629241b4e595b742a3ff149 100644 (file)
@@ -556,7 +556,11 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
                ce1 = ce2 = NULL;
                op1_type = op2_type = op3_type = IS_UNKNOWN;
                if ((opline->op1_type & (IS_TMP_VAR|IS_VAR|IS_CV))
-                && (opline->opcode != ZEND_ROPE_ADD && opline->opcode != ZEND_ROPE_END)) {
+                && opline->opcode != ZEND_ROPE_ADD
+                && opline->opcode != ZEND_ROPE_END
+                && opline->opcode != ZEND_NEW
+                && opline->opcode != ZEND_FETCH_CLASS_CONSTANT
+                && opline->opcode != ZEND_INIT_STATIC_METHOD_CALL) {
                        zval *zv = EX_VAR(opline->op1.var);
                        op1_type = Z_TYPE_P(zv);
                        uint8_t flags = 0;
@@ -576,7 +580,9 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
                                ce1 = Z_OBJCE_P(zv);
                        }
                }
-               if (opline->op2_type & (IS_TMP_VAR|IS_VAR|IS_CV)) {
+               if (opline->op2_type & (IS_TMP_VAR|IS_VAR|IS_CV)
+                && opline->opcode != ZEND_INSTANCEOF
+                && opline->opcode != ZEND_UNSET_STATIC_PROP) {
                        zval *zv = EX_VAR(opline->op2.var);
                        uint8_t flags = 0;