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