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