From b52830cf1120bdeaf693080e22b3af87e3aef9e8 Mon Sep 17 00:00:00 2001 From: Vlad Brezae Date: Fri, 9 Aug 2019 20:28:30 +0300 Subject: [PATCH] [interp] Fix overflow of execution stack (#16115) We were not tracking max_stack_height for a few opcodes. --- mono/mini/interp/transform.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mono/mini/interp/transform.c b/mono/mini/interp/transform.c index 00927473a9c..932efe614d7 100644 --- a/mono/mini/interp/transform.c +++ b/mono/mini/interp/transform.c @@ -5477,8 +5477,7 @@ generate_code (TransformData *td, MonoMethod *method, MonoMethodHeader *header, td->ip += 5; interp_add_ins (td, MINT_MONO_LDPTR); td->last_ins->data [0] = get_data_item_index (td, mono_method_get_wrapper_data (method, token)); - td->sp [0].type = STACK_TYPE_I; - ++td->sp; + PUSH_SIMPLE_TYPE (td, STACK_TYPE_I); break; case CEE_MONO_OBJADDR: CHECK_STACK (td, 1); @@ -5491,8 +5490,7 @@ generate_code (TransformData *td, MonoMethod *method, MonoMethodHeader *header, td->ip += 5; interp_add_ins (td, MINT_MONO_NEWOBJ); td->last_ins->data [0] = get_data_item_index (td, mono_method_get_wrapper_data (method, token)); - td->sp [0].type = STACK_TYPE_O; - ++td->sp; + PUSH_SIMPLE_TYPE (td, STACK_TYPE_O); break; case CEE_MONO_RETOBJ: CHECK_STACK (td, 1); @@ -5546,8 +5544,7 @@ generate_code (TransformData *td, MonoMethod *method, MonoMethodHeader *header, break; case CEE_MONO_LDDOMAIN: interp_add_ins (td, MINT_MONO_LDDOMAIN); - td->sp [0].type = STACK_TYPE_I; - ++td->sp; + PUSH_SIMPLE_TYPE (td, STACK_TYPE_I); ++td->ip; break; case CEE_MONO_SAVE_LAST_ERROR: -- 2.11.4.GIT