1// REQUIRES: asan-64-bits
2// RUN: %clangxx_asan -O3 %s -o %t
3// RUN: not %run %t 2>&1 | FileCheck %s
4// RUN: %env_asan_opts=poison_array_cookie=1 not %run %t 2>&1 | FileCheck %s
5// RUN: %env_asan_opts=poison_array_cookie=0 not %run %t 2>&1 | FileCheck %s --check-prefix=NO_COOKIE
6
7// UNSUPPORTED: ios
8
9#include <stdio.h>
10#include <stdlib.h>
11struct C {
12 int x;
13 ~C() {
14 fprintf(stderr, format: "ZZZZZZZZ\n");
15 exit(status: 1);
16 }
17};
18
19int main(int argc, char **argv) {
20 C *buffer = new C[argc];
21 buffer[-2].x = 10;
22// CHECK: AddressSanitizer: heap-buffer-overflow
23// CHECK: in main {{.*}}new_array_cookie_test.cpp:[[@LINE-2]]
24// CHECK: is located 0 bytes inside of 12-byte region
25// NO_COOKIE: ZZZZZZZZ
26 delete [] buffer;
27}
28

source code of compiler-rt/test/asan/TestCases/Posix/new_array_cookie_test.cpp