Prevent negitive numbers from being used as the left operand of shift operator.

This commit is contained in:
Dale Weiler 2013-05-29 02:37:45 +00:00
parent e02ebfe486
commit df8b486c98
3 changed files with 9 additions and 5 deletions

View file

@ -148,7 +148,6 @@ SPLINTFLAGS = \
-temptrans \ -temptrans \
-usereleased \ -usereleased \
-warnposix \ -warnposix \
-shiftimplementation \
+charindex \ +charindex \
-kepttrans \ -kepttrans \
-unqualifiedtrans \ -unqualifiedtrans \

11
lexer.h
View file

@ -163,9 +163,14 @@ typedef struct {
unsigned int flags; unsigned int flags;
} oper_info; } oper_info;
#define opid1(a) (a) /*
#define opid2(a,b) ((a<<8)|b) * Explicit uint8_t casts since the left operand of shift operator cannot
#define opid3(a,b,c) ((a<<16)|(b<<8)|c) * 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[] = { static const oper_info c_operators[] = {
{ "(", 0, opid1('('), ASSOC_LEFT, 99, OP_PREFIX}, /* paren expression - non function call */ { "(", 0, opid1('('), ASSOC_LEFT, 99, OP_PREFIX}, /* paren expression - non function call */

2
pak.c
View file

@ -26,7 +26,7 @@
* The PAK format uses a FOURCC concept for storing the magic ident within * The PAK format uses a FOURCC concept for storing the magic ident within
* the header as a uint32_t. * 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 { typedef struct {
uint32_t magic; /* "PACK" */ uint32_t magic; /* "PACK" */