15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t
25d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: not %run %t %t.dll 2>&1 | FileCheck %s
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <malloc.h>
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesextern "C" __declspec(dllexport)
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint test_function() {
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  int *buffer = (int*)malloc(42);
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  free(buffer);
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  buffer[0] = 42;
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: AddressSanitizer: heap-use-after-free on address [[ADDR:0x[0-9a-f]+]]
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: WRITE of size 4 at [[ADDR]] thread T0
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK-NEXT:  test_function {{.*}}dll_malloc_uaf.cc:[[@LINE-3]]
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK-NEXT:  main {{.*}}dll_host
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: [[ADDR]] is located 0 bytes inside of 42-byte region
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK-LABEL: freed by thread T0 here:
192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK-NEXT:  free
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK-NEXT:  test_function {{.*}}dll_malloc_uaf.cc:[[@LINE-10]]
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK-NEXT:  main {{.*}}dll_host
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK-LABEL: previously allocated by thread T0 here:
242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK-NEXT:  malloc
252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK-NEXT:  test_function {{.*}}dll_malloc_uaf.cc:[[@LINE-16]]
262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK-NEXT:  main {{.*}}dll_host
272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  return 0;
282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
29