Summary: D48660 / rL335762 added a `silence_unsigned_overflow` env flag for [[ https://github.com/google/oss-fuzz/pull/1717 | oss-fuzz needs ]], that allows to silence the reports from unsigned overflows. It makes sense, it is there because `-fsanitize=integer` sanitizer is not enabled on oss-fuzz, so this allows to still use it as an interestingness signal, without getting the actual reports. However there is a slight problem here. All types of unsigned overflows are ignored. Even if `-fno-sanitize-recover=unsigned` was used (which means the program will die after the report) there will still be no report, the program will just silently die. At the moment there are just two projects on oss-fuzz that care: * [[8eeffa627f/projects/llvm_libcxx/build.sh (L18-L20)| libc++ ]] * [[8eeffa627f/projects/librawspeed/build.sh| RawSpeed ]] (me) I suppose this could be overridden there ^, but i really don't think this is intended behavior in any case.. Reviewers: kcc, Dor1s, #sanitizers, filcab, vsk, kubamracek Reviewed By: Dor1s Subscribers: dberris, mclow.lists, llvm-commits Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D54771 llvm-svn: 347415
27 lines
1.5 KiB
C++
27 lines
1.5 KiB
C++
// RUN: %clangxx -fsanitize=unsigned-integer-overflow %s -o %t && %run %t 2>&1 | FileCheck %s --check-prefix=RECOVER
|
|
// RUN: %clangxx -fsanitize=unsigned-integer-overflow -fno-sanitize-recover=all -fsanitize-recover=unsigned-integer-overflow %s -o %t && %run %t 2>&1 | FileCheck %s --check-prefix=RECOVER
|
|
// RUN: %env_ubsan_opts=silence_unsigned_overflow=1 %run %t 2>&1 | FileCheck %s --check-prefix=SILENT-RECOVER --allow-empty
|
|
// RUN: %clangxx -fsanitize=unsigned-integer-overflow -fno-sanitize-recover=unsigned-integer-overflow %s -o %t
|
|
// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=ABORT
|
|
// RUN: %env_ubsan_opts=silence_unsigned_overflow=1 not %run %t 2>&1 | FileCheck %s --check-prefix=ABORT
|
|
|
|
#include <stdint.h>
|
|
|
|
int main() {
|
|
// These promote to 'int'.
|
|
(void)(uint8_t(0xff) + uint8_t(0xff));
|
|
(void)(uint16_t(0xf0fff) + uint16_t(0x0fff));
|
|
// RECOVER-NOT: runtime error
|
|
// ABORT-NOT: runtime error
|
|
|
|
uint32_t k = 0x87654321;
|
|
k += 0xedcba987;
|
|
// RECOVER: no-recover.cpp:[[@LINE-1]]:5: runtime error: unsigned integer overflow: 2271560481 + 3989547399 cannot be represented in type 'unsigned int'
|
|
// ABORT: no-recover.cpp:[[@LINE-2]]:5: runtime error: unsigned integer overflow: 2271560481 + 3989547399 cannot be represented in type 'unsigned int'
|
|
|
|
(void)(uint64_t(10000000000000000000ull) + uint64_t(9000000000000000000ull));
|
|
// RECOVER: 10000000000000000000 + 9000000000000000000 cannot be represented in type 'unsigned {{long( long)?}}'
|
|
// SILENT-RECOVER-NOT: runtime error
|
|
// ABORT-NOT: runtime error
|
|
}
|