From c1a3eefce4d9d2e3aad96793798fb3e0c674d6c4 Mon Sep 17 00:00:00 2001 From: Arne Goedeke <el@laramies.com> Date: Thu, 3 Jul 2014 18:06:26 +0200 Subject: [PATCH] Interpreter: cast to unsigned before shifting to avoid signed overflow --- src/interpreter.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/interpreter.h b/src/interpreter.h index d97766ee7d..6fe5c7ac34 100644 --- a/src/interpreter.h +++ b/src/interpreter.h @@ -138,9 +138,9 @@ static int eval_instruction(PIKE_OPCODE_T *pc) CASE(F_PREFIX_768); prefix+=768; DONE; CASE(F_PREFIX_1024); prefix+=1024; DONE; CASE(F_PREFIX_24BITX256); - prefix += (pc++)[0]<<24; + prefix += (unsigned INT32)(pc++)[0]<<24; CASE(F_PREFIX_WORDX256); - prefix += (pc++)[0]<<16; + prefix += (unsigned INT32)(pc++)[0]<<16; CASE(F_PREFIX_CHARX256); prefix += (pc++)[0]<<8; DONE; @@ -151,9 +151,9 @@ static int eval_instruction(PIKE_OPCODE_T *pc) CASE(F_PREFIX2_768); prefix2+=768; DONE; CASE(F_PREFIX2_1024); prefix2+=1024; DONE; CASE(F_PREFIX2_24BITX256); - prefix2 += (pc++)[0]<<24; + prefix2 += (unsigned INT32)(pc++)[0]<<24; CASE(F_PREFIX2_WORDX256); - prefix2 += (pc++)[0]<<16; + prefix2 += (unsigned INT32)(pc++)[0]<<16; CASE(F_PREFIX2_CHARX256); prefix2 += (pc++)[0]<<8; DONE; -- GitLab