From: Dale Weiler Date: Wed, 29 May 2013 02:37:45 +0000 (+0000) Subject: Prevent negitive numbers from being used as the left operand of shift operator. X-Git-Tag: v0.3.0~151^2~45 X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=commitdiff_plain;h=df8b486c98750ee719ddb88a6bb9b90f1e7557d8 Prevent negitive numbers from being used as the left operand of shift operator. --- diff --git a/Makefile b/Makefile index d419daa..2ab06dd 100644 --- a/Makefile +++ b/Makefile @@ -148,7 +148,6 @@ SPLINTFLAGS = \ -temptrans \ -usereleased \ -warnposix \ - -shiftimplementation \ +charindex \ -kepttrans \ -unqualifiedtrans \ diff --git a/lexer.h b/lexer.h index 24ac39a..2573fb2 100644 --- a/lexer.h +++ b/lexer.h @@ -163,9 +163,14 @@ typedef struct { unsigned int flags; } oper_info; -#define opid1(a) (a) -#define opid2(a,b) ((a<<8)|b) -#define opid3(a,b,c) ((a<<16)|(b<<8)|c) +/* + * Explicit uint8_t casts since the left operand of shift operator cannot + * be negative, even though it won't happen, this supresses the future + * possibility. + */ +#define opid1(a) ((uint8_t)a) +#define opid2(a,b) (((uint8_t)a<<8) |(uint8_t)b) +#define opid3(a,b,c) (((uint8_t)a<<16)|((uint8_t)b<<8)|(uint8_t)c) static const oper_info c_operators[] = { { "(", 0, opid1('('), ASSOC_LEFT, 99, OP_PREFIX}, /* paren expression - non function call */ diff --git a/pak.c b/pak.c index 0f90d67..048469b 100644 --- a/pak.c +++ b/pak.c @@ -26,7 +26,7 @@ * The PAK format uses a FOURCC concept for storing the magic ident within * the header as a uint32_t. */ -#define PAK_FOURCC ((uint32_t)(('P' | ('A' << 8) | ('C' << 16) | ('K' << 24)))) +#define PAK_FOURCC ((uint32_t)(((uint8_t)'P'|((uint8_t)'A'<<8)|((uint8_t)'C'<<16)|((uint8_t)'K'<<24)))) typedef struct { uint32_t magic; /* "PACK" */