From 91d6952b324a4c949ef4438fe027ca13127b8f48 Mon Sep 17 00:00:00 2001
From: Arne Goedeke <el@laramies.com>
Date: Sat, 11 Jan 2014 19:37:50 -0500
Subject: [PATCH] cpp: do not read outside of string boundaries

---
 src/preprocessor.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/preprocessor.h b/src/preprocessor.h
index bc3d9eac33..4219e33d40 100644
--- a/src/preprocessor.h
+++ b/src/preprocessor.h
@@ -148,10 +148,10 @@ static struct pike_string *WC_BINARY_FINDSTRING(WCHAR *str, ptrdiff_t len)
 
 #define STRCAT(X,Y) _STRCAT(X,Y,flags,this)
 #define CHECKWORD2(X,LEN) \
- (!MEMCMP(X,data+pos,LEN<<SHIFT) && !WC_ISIDCHAR(data[pos+LEN]))
+ (pos + (ptrdiff_t)(LEN) <= len && !MEMCMP(X,data+pos,(LEN)<<(SHIFT)) && (pos + (ptrdiff_t)(LEN) == len || !WC_ISIDCHAR(data[pos+(LEN)])))
 #define WGOBBLE2(X) (CHECKWORD2(X,NELEM(X)) ? (pos+=NELEM(X)),1 : 0)
 #define GOBBLEOP2(X) \
- ((!MEMCMP(X,data+pos,sizeof(X))) ? (pos += NELEM(X)),1 : 0)
+ (pos + (ptrdiff_t)NELEM(X) < len && ((!MEMCMP(X,data+pos,sizeof(X))) ? (pos += NELEM(X)),1 : 0))
 
 /*
  * Some prototypes
-- 
GitLab