fixed undefined signed integer overflow for expression "1 << 31"
authorHolger Schemel <holger.schemel@virtion.de>
Thu, 20 Oct 2022 15:35:49 +0000 (17:35 +0200)
committerHolger Schemel <holger.schemel@virtion.de>
Thu, 20 Oct 2022 15:39:07 +0000 (17:39 +0200)
This issue was found by Cppcheck (static C/C++ code analysis tool)
and by using Clang with option "-fsanitize=undefined".

src/editor.c
src/files.c
src/main.h
src/tape.h

index 120a58912060db51137b59b86a1ad9c764ba6633..833dce2ec7996d81f106a9d3522178bb274753bc 100644 (file)
@@ -2079,38 +2079,38 @@ static struct ValueTextInfo options_change_trigger_player[] =
 
 static struct ValueTextInfo options_change_trigger_page[] =
 {
 
 static struct ValueTextInfo options_change_trigger_page[] =
 {
-  { (1 << 0),                  "1"                             },
-  { (1 << 1),                  "2"                             },
-  { (1 << 2),                  "3"                             },
-  { (1 << 3),                  "4"                             },
-  { (1 << 4),                  "5"                             },
-  { (1 << 5),                  "6"                             },
-  { (1 << 6),                  "7"                             },
-  { (1 << 7),                  "8"                             },
-  { (1 << 8),                  "9"                             },
-  { (1 << 9),                  "10"                            },
-  { (1 << 10),                 "11"                            },
-  { (1 << 11),                 "12"                            },
-  { (1 << 12),                 "13"                            },
-  { (1 << 13),                 "14"                            },
-  { (1 << 14),                 "15"                            },
-  { (1 << 15),                 "16"                            },
-  { (1 << 16),                 "17"                            },
-  { (1 << 17),                 "18"                            },
-  { (1 << 18),                 "19"                            },
-  { (1 << 19),                 "20"                            },
-  { (1 << 20),                 "21"                            },
-  { (1 << 21),                 "22"                            },
-  { (1 << 22),                 "23"                            },
-  { (1 << 23),                 "24"                            },
-  { (1 << 24),                 "25"                            },
-  { (1 << 25),                 "26"                            },
-  { (1 << 26),                 "27"                            },
-  { (1 << 27),                 "28"                            },
-  { (1 << 28),                 "29"                            },
-  { (1 << 29),                 "30"                            },
-  { (1 << 30),                 "31"                            },
-  { (1 << 31),                 "32"                            },
+  { (1u << 0),                 "1"                             },
+  { (1u << 1),                 "2"                             },
+  { (1u << 2),                 "3"                             },
+  { (1u << 3),                 "4"                             },
+  { (1u << 4),                 "5"                             },
+  { (1u << 5),                 "6"                             },
+  { (1u << 6),                 "7"                             },
+  { (1u << 7),                 "8"                             },
+  { (1u << 8),                 "9"                             },
+  { (1u << 9),                 "10"                            },
+  { (1u << 10),                        "11"                            },
+  { (1u << 11),                        "12"                            },
+  { (1u << 12),                        "13"                            },
+  { (1u << 13),                        "14"                            },
+  { (1u << 14),                        "15"                            },
+  { (1u << 15),                        "16"                            },
+  { (1u << 16),                        "17"                            },
+  { (1u << 17),                        "18"                            },
+  { (1u << 18),                        "19"                            },
+  { (1u << 19),                        "20"                            },
+  { (1u << 20),                        "21"                            },
+  { (1u << 21),                        "22"                            },
+  { (1u << 22),                        "23"                            },
+  { (1u << 23),                        "24"                            },
+  { (1u << 24),                        "25"                            },
+  { (1u << 25),                        "26"                            },
+  { (1u << 26),                        "27"                            },
+  { (1u << 27),                        "28"                            },
+  { (1u << 28),                        "29"                            },
+  { (1u << 29),                        "30"                            },
+  { (1u << 30),                        "31"                            },
+  { (1u << 31),                        "32"                            },
   { CH_PAGE_ANY,               "any"                           },
 
   { -1,                                NULL                            }
   { CH_PAGE_ANY,               "any"                           },
 
   { -1,                                NULL                            }
index 5e95fb80f0cd908e4aeaa08800cd14b2c7738dd3..5d8f6479387a22bd0ec5c25424e865265bc37418 100644 (file)
@@ -2848,7 +2848,7 @@ static int LoadLevel_CUS3(File *file, int chunk_size, struct LevelInfo *level)
     // bits 0 - 31 of "has_event[]"
     event_bits = getFile32BitBE(file);
     for (j = 0; j < MIN(NUM_CHANGE_EVENTS, 32); j++)
     // bits 0 - 31 of "has_event[]"
     event_bits = getFile32BitBE(file);
     for (j = 0; j < MIN(NUM_CHANGE_EVENTS, 32); j++)
-      if (event_bits & (1 << j))
+      if (event_bits & (1u << j))
        ei->change->has_event[j] = TRUE;
 
     ei->change->target_element = getMappedElement(getFile16BitBE(file));
        ei->change->has_event[j] = TRUE;
 
     ei->change->target_element = getMappedElement(getFile16BitBE(file));
@@ -2984,7 +2984,7 @@ static int LoadLevel_CUS4(File *file, int chunk_size, struct LevelInfo *level)
     // bits 0 - 31 of "has_event[]" ...
     event_bits = getFile32BitBE(file);
     for (j = 0; j < MIN(NUM_CHANGE_EVENTS, 32); j++)
     // bits 0 - 31 of "has_event[]" ...
     event_bits = getFile32BitBE(file);
     for (j = 0; j < MIN(NUM_CHANGE_EVENTS, 32); j++)
-      if (event_bits & (1 << j))
+      if (event_bits & (1u << j))
        change->has_event[j] = TRUE;
 
     change->target_element = getMappedElement(getFile16BitBE(file));
        change->has_event[j] = TRUE;
 
     change->target_element = getMappedElement(getFile16BitBE(file));
@@ -3025,7 +3025,7 @@ static int LoadLevel_CUS4(File *file, int chunk_size, struct LevelInfo *level)
     // ... bits 32 - 39 of "has_event[]" (not nice, but downward compatible)
     event_bits = getFile8Bit(file);
     for (j = 32; j < NUM_CHANGE_EVENTS; j++)
     // ... bits 32 - 39 of "has_event[]" (not nice, but downward compatible)
     event_bits = getFile8Bit(file);
     for (j = 32; j < NUM_CHANGE_EVENTS; j++)
-      if (event_bits & (1 << (j - 32)))
+      if (event_bits & (1u << (j - 32)))
        change->has_event[j] = TRUE;
   }
 
        change->has_event[j] = TRUE;
   }
 
@@ -7327,7 +7327,7 @@ static void SaveLevel_CUS4(FILE *file, struct LevelInfo *level, int element)
     event_bits = 0;
     for (j = 0; j < MIN(NUM_CHANGE_EVENTS, 32); j++)
       if (change->has_event[j])
     event_bits = 0;
     for (j = 0; j < MIN(NUM_CHANGE_EVENTS, 32); j++)
       if (change->has_event[j])
-       event_bits |= (1 << j);
+       event_bits |= (1u << j);
     putFile32BitBE(file, event_bits);
 
     putFile16BitBE(file, change->target_element);
     putFile32BitBE(file, event_bits);
 
     putFile16BitBE(file, change->target_element);
@@ -7367,7 +7367,7 @@ static void SaveLevel_CUS4(FILE *file, struct LevelInfo *level, int element)
     event_bits = 0;
     for (j = 32; j < NUM_CHANGE_EVENTS; j++)
       if (change->has_event[j])
     event_bits = 0;
     for (j = 32; j < NUM_CHANGE_EVENTS; j++)
       if (change->has_event[j])
-       event_bits |= (1 << (j - 32));
+       event_bits |= (1u << (j - 32));
     putFile8Bit(file, event_bits);
   }
 }
     putFile8Bit(file, event_bits);
   }
 }
index c5ff5f8cf2329033ca85c351b3ceae8ffc98b4c0..fd70216dddaa7b7bb6cb586bdf84563be68748c8 100644 (file)
 #define EP_BITMASK_BASE_DEFAULT                (1 << EP_CAN_MOVE_INTO_ACID)
 #define EP_BITMASK_DEFAULT             0
 
 #define EP_BITMASK_BASE_DEFAULT                (1 << EP_CAN_MOVE_INTO_ACID)
 #define EP_BITMASK_DEFAULT             0
 
-#define PROPERTY_BIT(p)                        (1 << ((p) % 32))
+#define PROPERTY_BIT(p)                        (1u << ((p) % 32))
 #define PROPERTY_VAR(e,p)              (element_info[e].properties[(p) / 32])
 #define HAS_PROPERTY(e,p)      ((PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) != 0)
 #define SET_PROPERTY(e,p,v)    ((v) ?                                     \
 #define PROPERTY_VAR(e,p)              (element_info[e].properties[(p) / 32])
 #define HAS_PROPERTY(e,p)      ((PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) != 0)
 #define SET_PROPERTY(e,p,v)    ((v) ?                                     \
index d78c4b8fe7ba7c7584c21f5e073dc2633a90c4fa..8b375edec55db00f69df8cb5aef264c5e70916e3 100644 (file)
 #define VIDEO_CONTROL_YSIZE    VIDEO_BUTTON_YSIZE
 
 // values for video tape control
 #define VIDEO_CONTROL_YSIZE    VIDEO_BUTTON_YSIZE
 
 // values for video tape control
-#define VIDEO_STATE_PLAY_OFF   (1 << 0)
-#define VIDEO_STATE_PLAY_ON    (1 << 1)
-#define VIDEO_STATE_REC_OFF    (1 << 2)
-#define VIDEO_STATE_REC_ON     (1 << 3)
-#define VIDEO_STATE_PAUSE_OFF  (1 << 4)
-#define VIDEO_STATE_PAUSE_ON   (1 << 5)
-#define VIDEO_STATE_DATE_OFF   (1 << 6)
-#define VIDEO_STATE_DATE_ON    (1 << 7)
-#define VIDEO_STATE_TIME_OFF   (1 << 8)
-#define VIDEO_STATE_TIME_ON    (1 << 9)
-#define VIDEO_STATE_FRAME_OFF  (1 << 10)
-#define VIDEO_STATE_FRAME_ON   (1 << 11)
-#define VIDEO_STATE_FFWD_OFF   (1 << 12)
-#define VIDEO_STATE_FFWD_ON    (1 << 13)
-#define VIDEO_STATE_WARP_OFF   (1 << 14)
-#define VIDEO_STATE_WARP_ON    (1 << 15)
-#define VIDEO_STATE_WARP2_OFF  (1 << 16)
-#define VIDEO_STATE_WARP2_ON   (1 << 17)
-#define VIDEO_STATE_PBEND_OFF  (1 << 18)
-#define VIDEO_STATE_PBEND_ON   (1 << 19)
-#define VIDEO_STATE_1STEP_OFF  (1 << 20)
-#define VIDEO_STATE_1STEP_ON   (1 << 21)
-
-#define VIDEO_PRESS_PLAY_ON    (1 << 22)
-#define VIDEO_PRESS_PLAY_OFF   (1 << 23)
-#define VIDEO_PRESS_REC_ON     (1 << 24)
-#define VIDEO_PRESS_REC_OFF    (1 << 25)
-#define VIDEO_PRESS_PAUSE_ON   (1 << 26)
-#define VIDEO_PRESS_PAUSE_OFF  (1 << 27)
-#define VIDEO_PRESS_STOP_ON    (1 << 28)
-#define VIDEO_PRESS_STOP_OFF   (1 << 29)
-#define VIDEO_PRESS_EJECT_ON   (1 << 30)
-#define VIDEO_PRESS_EJECT_OFF  (1 << 31)
+#define VIDEO_STATE_PLAY_OFF   (1u << 0)
+#define VIDEO_STATE_PLAY_ON    (1u << 1)
+#define VIDEO_STATE_REC_OFF    (1u << 2)
+#define VIDEO_STATE_REC_ON     (1u << 3)
+#define VIDEO_STATE_PAUSE_OFF  (1u << 4)
+#define VIDEO_STATE_PAUSE_ON   (1u << 5)
+#define VIDEO_STATE_DATE_OFF   (1u << 6)
+#define VIDEO_STATE_DATE_ON    (1u << 7)
+#define VIDEO_STATE_TIME_OFF   (1u << 8)
+#define VIDEO_STATE_TIME_ON    (1u << 9)
+#define VIDEO_STATE_FRAME_OFF  (1u << 10)
+#define VIDEO_STATE_FRAME_ON   (1u << 11)
+#define VIDEO_STATE_FFWD_OFF   (1u << 12)
+#define VIDEO_STATE_FFWD_ON    (1u << 13)
+#define VIDEO_STATE_WARP_OFF   (1u << 14)
+#define VIDEO_STATE_WARP_ON    (1u << 15)
+#define VIDEO_STATE_WARP2_OFF  (1u << 16)
+#define VIDEO_STATE_WARP2_ON   (1u << 17)
+#define VIDEO_STATE_PBEND_OFF  (1u << 18)
+#define VIDEO_STATE_PBEND_ON   (1u << 19)
+#define VIDEO_STATE_1STEP_OFF  (1u << 20)
+#define VIDEO_STATE_1STEP_ON   (1u << 21)
+
+#define VIDEO_PRESS_PLAY_ON    (1u << 22)
+#define VIDEO_PRESS_PLAY_OFF   (1u << 23)
+#define VIDEO_PRESS_REC_ON     (1u << 24)
+#define VIDEO_PRESS_REC_OFF    (1u << 25)
+#define VIDEO_PRESS_PAUSE_ON   (1u << 26)
+#define VIDEO_PRESS_PAUSE_OFF  (1u << 27)
+#define VIDEO_PRESS_STOP_ON    (1u << 28)
+#define VIDEO_PRESS_STOP_OFF   (1u << 29)
+#define VIDEO_PRESS_EJECT_ON   (1u << 30)
+#define VIDEO_PRESS_EJECT_OFF  (1u << 31)
 
 #define VIDEO_STATE_PLAY(x)  ((x) ? VIDEO_STATE_PLAY_ON : VIDEO_STATE_PLAY_OFF)
 #define VIDEO_STATE_REC(x)   ((x) ? VIDEO_STATE_REC_ON  : VIDEO_STATE_REC_OFF)
 
 #define VIDEO_STATE_PLAY(x)  ((x) ? VIDEO_STATE_PLAY_ON : VIDEO_STATE_PLAY_OFF)
 #define VIDEO_STATE_REC(x)   ((x) ? VIDEO_STATE_REC_ON  : VIDEO_STATE_REC_OFF)