From feb2855f0cb2c44c22e85af85d4e971404d9c7c3 Mon Sep 17 00:00:00 2001 From: Robert Fancsik Date: Thu, 4 Feb 2021 16:05:56 +0100 Subject: [PATCH] Fix cleanup in VM_OC_INITIALIZER_PUSH_PROP on abrupt completion (#4564) JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu --- jerry-core/vm/vm.c | 4 ++-- tests/jerry/es.next/object-pattern.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/jerry-core/vm/vm.c b/jerry-core/vm/vm.c index 06a40becc..59664f6db 100644 --- a/jerry-core/vm/vm.c +++ b/jerry-core/vm/vm.c @@ -2544,7 +2544,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ case VM_OC_INITIALIZER_PUSH_PROP: { ecma_value_t *last_context_end_p = VM_LAST_CONTEXT_END (); - right_value = last_context_end_p[-2]; + ecma_value_t base = last_context_end_p[-2]; if (opcode == CBC_EXT_INITIALIZER_PUSH_PROP) { @@ -2557,7 +2557,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ stack_top_p--; } - result = vm_op_get_value (right_value, left_value); + result = vm_op_get_value (base, left_value); if (ECMA_IS_VALUE_ERROR (result)) { diff --git a/tests/jerry/es.next/object-pattern.js b/tests/jerry/es.next/object-pattern.js index d69c7e802..c6a568d26 100644 --- a/tests/jerry/es.next/object-pattern.js +++ b/tests/jerry/es.next/object-pattern.js @@ -237,3 +237,14 @@ try { } catch (e) { assert (e instanceof SyntaxError); } + +var abruptObj = Object.defineProperty({}, 'a', { + get() { throw 5.2; } +}); + +try { + const { a } = abruptObj; + assert (false); +} catch (e) { + assert (e === 5.2); +}