mirror of https://github.com/microsoft/clang.git
59 lines
1.3 KiB
C
59 lines
1.3 KiB
C
// RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -analyzer-checker=core,alpha.security.ArrayBoundV2 -Wno-implicit-function-declaration -verify %s
|
|
// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -analyzer-checker=core,alpha.security.ArrayBoundV2 -Wno-implicit-function-declaration -DM32 -verify %s
|
|
// expected-no-diagnostics
|
|
|
|
#define UINT_MAX (~0u)
|
|
|
|
#ifdef M32
|
|
|
|
#define X86_ARRAY_SIZE (UINT_MAX/2 + 4)
|
|
|
|
void testIndexTooBig() {
|
|
char arr[X86_ARRAY_SIZE];
|
|
char *ptr = arr + UINT_MAX/2;
|
|
ptr += 2; // index shouldn't overflow
|
|
*ptr = 42; // no-warning
|
|
}
|
|
|
|
#else // 64-bit tests
|
|
|
|
#define ARRAY_SIZE 0x100000000
|
|
|
|
void testIndexOverflow64() {
|
|
char arr[ARRAY_SIZE];
|
|
char *ptr = arr + UINT_MAX/2;
|
|
ptr += 2; // don't overflow 64-bit index
|
|
*ptr = 42; // no-warning
|
|
}
|
|
|
|
#define ULONG_MAX (~0ul)
|
|
#define BIG_INDEX (ULONG_MAX/16)
|
|
|
|
void testIndexTooBig64() {
|
|
char arr[ULONG_MAX/8-1];
|
|
char *ptr = arr + BIG_INDEX;
|
|
ptr += 2; // don't overflow 64-bit index
|
|
*ptr = 42; // no-warning
|
|
}
|
|
|
|
#define SIZE 4294967296
|
|
|
|
static unsigned size;
|
|
static void * addr;
|
|
static unsigned buf[SIZE];
|
|
|
|
void testOutOfBounds() {
|
|
// Not out of bounds.
|
|
buf[SIZE-1] = 1; // no-warning
|
|
}
|
|
|
|
void testOutOfBoundsCopy1() {
|
|
memcpy(buf, addr, size); // no-warning
|
|
}
|
|
|
|
void testOutOfBoundsCopy2() {
|
|
memcpy(addr, buf, size); // no-warning
|
|
}
|
|
|
|
#endif
|