Prevent negitive numbers from being used as the left operand of shift operator.
authorDale Weiler <killfieldengine@gmail.com>
Wed, 29 May 2013 02:37:45 +0000 (02:37 +0000)
committerDale Weiler <killfieldengine@gmail.com>
Wed, 29 May 2013 02:37:45 +0000 (02:37 +0000)
Makefile
lexer.h
pak.c

index d419daa..2ab06dd 100644 (file)
--- 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 (file)
--- 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 (file)
--- 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" */