Address sanitizer
AddressSanitizer (aka ASan) is a memory error detector for C/C++. It finds:
- Use after free (dangling pointer dereference)
- Heap buffer overflow
- Stack buffer overflow
- Global buffer overflow
- Use after return
- Use after scope
- Initialization order bugs
- Memory leaks
Each bullet point links to an example of what it looks like when ASan detects an error. They all start similar (ERROR: AddressSanitizer
...) except for Memory leaks (ERROR: LeakSanitizer...).
UndefinedBehavior Sanitizer
UndefinedBehaviorSanitizer (UBSan) is a fast undefined behavior detector. UBSan modifies the program at compile-time to catch various kinds of undefined behavior during program execution.
A list of available checks can be found here. The flag -fsanitize=undefined will perform all checks except for float-divide-by-zero
, unsigned-integer-overflow
, implicit-conversion
, local-bounds
and the nullability-*
group of checks.
Depending on the severity, error detection look like the following:
test.c:4:13: runtime error: division by zero SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior test.c:4:13 in UndefinedBehaviorSanitizer:DEADLYSIGNAL ==120==ERROR: UndefinedBehaviorSanitizer: FPE on unknown address 0x00000042370f (pc 0x00000042370f bp 0x7fff8e7e9860 sp 0x7fff8e7e9850 T120) #0 0x42370f in main (/mnt/c/Users/Pascal/netdef/a.out+0x42370f) #1 0x7f941dd3c0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2) #2 0x40330d in _start (/mnt/c/Users/Pascal/netdef/a.out+0x40330d) UndefinedBehaviorSanitizer can not provide additional info. SUMMARY: UndefinedBehaviorSanitizer: FPE (/mnt/c/Users/Pascal/netdef/a.out+0x42370f) in main ==120==ABORTING
test.c:3:5: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior test.c:3:5 in