Skip to content

Commit ea9e8b7

Browse files
committed
Expand undefined sanitizer examples
Also, changed the default for detected undefined issues to stop program execution and return a non-zero code.
1 parent af2c5ac commit ea9e8b7

File tree

5 files changed

+38
-34
lines changed

5 files changed

+38
-34
lines changed

.gitlab-ci.yml

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -469,16 +469,10 @@ Linux/Static Analysis:
469469
CMAKE_OPTIONS: -D CLANG_TIDY=ON -D CPPCHECK=ON
470470
<<: *linux_success_template
471471

472-
Linux/GCC/Baseline:
473-
variables:
474-
CTEST_OPTIONS: --verbose
475-
<<: *linux_success_template
476-
477472
Linux/Clang/Baseline:
478473
variables:
479474
CC: clang
480475
CXX: clang++
481-
CTEST_OPTIONS: --verbose
482476
<<: *linux_success_template
483477

484478
Linux/GCC/ThreadSanitizer:
@@ -527,16 +521,14 @@ Linux/Clang/MemorySanitizer:
527521
Linux/GCC/UndefinedSanitizer:
528522
variables:
529523
CMAKE_OPTIONS: -D EXAMPLE_USE_SANITIZER=undefined
530-
CTEST_OPTIONS: --verbose
531-
<<: *linux_success_template
524+
<<: *linux_failure_template
532525

533526
Linux/Clang/UndefinedSanitizer:
534527
variables:
535528
CC: clang
536529
CXX: clang++
537530
CMAKE_OPTIONS: -D EXAMPLE_USE_SANITIZER=undefined
538-
CTEST_OPTIONS: --verbose
539-
<<: *linux_success_template
531+
<<: *linux_failure_template
540532

541533
.macos_success_template: &macos_success_template
542534
stage: Sanitizers
@@ -565,15 +557,12 @@ Linux/Clang/UndefinedSanitizer:
565557
- "! ctest --test-dir build --output-on-failure ${CTEST_OPTIONS}"
566558

567559
macOS/AppleClang/Baseline:
568-
variables:
569-
CTEST_OPTIONS: --verbose
570560
<<: *macos_success_template
571561

572562
macOS/Clang/Baseline:
573563
variables:
574564
CC: clang
575565
CXX: clang++
576-
CTEST_OPTIONS: --verbose
577566
<<: *macos_success_template
578567

579568
macOS/AppleClang/ThreadSanitizer:
@@ -610,16 +599,14 @@ macOS/Clang/LeakSanitizer:
610599
macOS/AppleClang/UndefinedSanitizer:
611600
variables:
612601
CMAKE_OPTIONS: -D EXAMPLE_USE_SANITIZER=undefined
613-
CTEST_OPTIONS: --verbose
614-
<<: *macos_success_template
602+
<<: *macos_failure_template
615603

616604
macOS/Clang/UndefinedSanitizer:
617605
variables:
618606
CC: clang
619607
CXX: clang++
620608
CMAKE_OPTIONS: -D EXAMPLE_USE_SANITIZER=undefined
621-
CTEST_OPTIONS: --verbose
622-
<<: *macos_success_template
609+
<<: *macos_failure_template
623610

624611
Windows/MSVC/Address Sanitizer:
625612
image: stabletec/build-core:windows-ltsc2022
@@ -688,14 +675,6 @@ Linux/GCC/UndefinedSanitizer (LEGACY):
688675
CTEST_OPTIONS: --verbose
689676
<<: *linux_success_template
690677

691-
Linux/Clang/UndefinedSanitizer (LEGACY):
692-
variables:
693-
CC: clang
694-
CXX: clang++
695-
CMAKE_OPTIONS: -D USE_SANITIZER=undefined
696-
CTEST_OPTIONS: --verbose
697-
<<: *linux_success_template
698-
699678
Windows/MSVC/Address Sanitizer (LEGACY):
700679
image: stabletec/build-core:windows-ltsc2022
701680
stage: Sanitizers

example/all/CMakeLists.txt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ set_sanitizer_options(leak DEFAULT)
4141
set_sanitizer_options(memory DEFAULT)
4242
set_sanitizer_options(memorywithorigins DEFAULT SANITIZER memory
4343
-fsanitize-memory-track-origins)
44-
set_sanitizer_options(undefined DEFAULT)
44+
set_sanitizer_options(undefined DEFAULT -fno-sanitize-recover=undefined)
4545
set_sanitizer_options(thread DEFAULT)
4646

4747
set(EXAMPLE_USE_SANITIZER
@@ -113,6 +113,13 @@ target_code_coverage(msan_uninitialized_pointer_used AUTO ALL)
113113
add_test(msan_uninitialized_pointer_used msan_uninitialized_pointer_used)
114114

115115
# Fails with UndefinedBehaviourSanitizer
116-
add_executable(ubsanFail ../src/ubsan_fail.cpp)
117-
target_code_coverage(ubsanFail AUTO ALL)
118-
add_test(ubsan ubsanFail)
116+
add_executable(ubsan_dereferencing_misaligned_pointer
117+
../src/ubsan/dereferencing_misaligned_pointer.c)
118+
target_code_coverage(ubsan_dereferencing_misaligned_pointer AUTO ALL)
119+
add_test(ubsan_dereferencing_misaligned_pointer
120+
ubsan_dereferencing_misaligned_pointer)
121+
122+
add_executable(ubsan_signed_integer_overflow
123+
../src/ubsan/signed_integer_overflow.c)
124+
target_code_coverage(ubsan_signed_integer_overflow AUTO ALL)
125+
add_test(ubsan_signed_integer_overflow ubsan_signed_integer_overflow)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// example of a program that dereferences a mis-aligned pointer
2+
#include <stdio.h>
3+
#include <stdlib.h>
4+
#include <string.h>
5+
6+
int main(int argc, char **argv) {
7+
int *array = malloc(10 * sizeof(int));
8+
memset(array, 0, 10 * sizeof(int));
9+
// aligned
10+
printf("aligned: %i", *array);
11+
// mis-aligned
12+
int *misArray = (int *)((char *)(array) + 1);
13+
printf("aligned: %i", *misArray); // failure point
14+
15+
free(array);
16+
return 0;
17+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// example program that performs a signed integer overflow
2+
int main(int argc, char **argv) {
3+
int k = 0x7fffffff;
4+
k += argc; // failure point
5+
return 0;
6+
}

example/src/ubsan_fail.cpp

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)