Enable GCC options to detect undefined behaviour

GCC has an Undefined Behavior Sanitizer (ubsan), which enables run-time
checks of undefined behaviour. It has been enabled for the `develop`
build target.

A small bug detected with it has been fixed.

Signed-off-by: Antonio Niño Díaz <antonio_nd@outlook.com>
This commit is contained in:
Antonio Niño Díaz
2018-04-28 00:57:20 +01:00
parent 24d7cfe0f9
commit 6fe2741f2d
2 changed files with 12 additions and 7 deletions

View File

@@ -207,7 +207,12 @@ develop:
-Wstringop-overflow=4 -Walloc-zero -Wduplicated-cond \ -Wstringop-overflow=4 -Walloc-zero -Wduplicated-cond \
-Wfloat-equal -Wshadow -Wcast-qual -Wcast-align -Wlogical-op \ -Wfloat-equal -Wshadow -Wcast-qual -Wcast-align -Wlogical-op \
-Wnested-externs -Wno-aggressive-loop-optimizations -Winline \ -Wnested-externs -Wno-aggressive-loop-optimizations -Winline \
-Wundef -Wstrict-prototypes -Wold-style-definition" -Wundef -Wstrict-prototypes -Wold-style-definition \
-fsanitize=shift -fsanitize=integer-divide-by-zero \
-fsanitize=unreachable -fsanitize=vla-bound \
-fsanitize=signed-integer-overflow -fsanitize=bounds \
-fsanitize=object-size -fsanitize=bool -fsanitize=enum \
-fsanitize=alignment -fsanitize=null"
# Targets for the project maintainer to easily create Windows exes. # Targets for the project maintainer to easily create Windows exes.
# This is not for Windows users! # This is not for Windows users!

View File

@@ -36,14 +36,14 @@ uint8_t oReadLib;
*/ */
static int32_t readlong(FILE *f) static int32_t readlong(FILE *f)
{ {
int32_t r; uint32_t r;
r = fgetc(f); r = ((uint32_t)(uint8_t)fgetc(f));
r |= fgetc(f) << 8; r |= ((uint32_t)(uint8_t)fgetc(f)) << 8;
r |= fgetc(f) << 16; r |= ((uint32_t)(uint8_t)fgetc(f)) << 16;
r |= fgetc(f) << 24; r |= ((uint32_t)(uint8_t)fgetc(f)) << 24;
return r; return (int32_t)r;
} }
/* /*