From 950a0f10cd8271241560a93aacc97750abb16862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zsolt=20Borb=C3=A9ly?= Date: Thu, 13 Apr 2017 14:34:10 +0200 Subject: [PATCH] Fix a few issues which can lead to undefined-behaviour (#1730) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JerryScript-DCO-1.0-Signed-off-by: Zsolt Borbély zsborbely.u-szeged@partner.samsung.com --- jerry-core/ecma/base/ecma-helpers-value.c | 2 +- jerry-core/parser/regexp/re-bytecode.c | 6 ++++-- jerry-core/vm/vm.c | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/jerry-core/ecma/base/ecma-helpers-value.c b/jerry-core/ecma/base/ecma-helpers-value.c index 75b86ba3b..23389ba00 100644 --- a/jerry-core/ecma/base/ecma-helpers-value.c +++ b/jerry-core/ecma/base/ecma-helpers-value.c @@ -370,7 +370,7 @@ ecma_make_integer_value (ecma_integer_value_t integer_value) /**< integer number { JERRY_ASSERT (ECMA_IS_INTEGER_NUMBER (integer_value)); - return ((ecma_value_t) (integer_value << ECMA_DIRECT_SHIFT)) | ECMA_DIRECT_TYPE_INTEGER_VALUE; + return (((ecma_value_t) integer_value) << ECMA_DIRECT_SHIFT) | ECMA_DIRECT_TYPE_INTEGER_VALUE; } /* ecma_make_integer_value */ /** diff --git a/jerry-core/parser/regexp/re-bytecode.c b/jerry-core/parser/regexp/re-bytecode.c index 2631b4bc5..71a72af12 100644 --- a/jerry-core/parser/regexp/re-bytecode.c +++ b/jerry-core/parser/regexp/re-bytecode.c @@ -126,7 +126,8 @@ re_bytecode_list_insert (re_bytecode_ctx_t *bc_ctx_p, /**< RegExp bytecode conte inline ecma_char_t __attr_always_inline___ re_get_char (uint8_t **bc_p) /**< pointer to bytecode start */ { - ecma_char_t chr = *((ecma_char_t *) *bc_p); + ecma_char_t chr; + memcpy (&chr, *bc_p, sizeof (ecma_char_t)); (*bc_p) += sizeof (ecma_char_t); return chr; } /* re_get_char */ @@ -152,7 +153,8 @@ re_get_opcode (uint8_t **bc_p) /**< pointer to bytecode start */ inline uint32_t __attr_always_inline___ re_get_value (uint8_t **bc_p) /**< pointer to bytecode start */ { - uint32_t value = *((uint32_t *) *bc_p); + uint32_t value; + memcpy (&value, *bc_p, sizeof (uint32_t)); (*bc_p) += sizeof (uint32_t); return value; } /* re_get_value */ diff --git a/jerry-core/vm/vm.c b/jerry-core/vm/vm.c index cb5139f6e..a7a4d7e12 100644 --- a/jerry-core/vm/vm.c +++ b/jerry-core/vm/vm.c @@ -2754,7 +2754,8 @@ vm_run (const ecma_compiled_code_t *bytecode_header_p, /**< byte-code data heade frame_ctx.is_eval_code = is_eval_code; frame_ctx.call_operation = VM_NO_EXEC_OP; - ecma_value_t stack[call_stack_size]; + /* Use JERRY_MAX() to avoid array declaration with size 0. */ + ecma_value_t stack[JERRY_MAX (call_stack_size, 1)]; frame_ctx.registers_p = stack; return vm_execute (&frame_ctx, arg_list_p, arg_list_len);