brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.0 KiB · 0731a02 Raw
29 lines · cpp
1#include "sanitizer\allocator_interface.h"2#include <cassert>3#include <stdio.h>4#include <windows.h>5// RUN: %clang_cl_asan %s -o%t6// RUN: %env_asan_opts=windows_hook_rtl_allocators=true %run %t 2>&1 | FileCheck %s7// UNSUPPORTED: asan-64-bits8 9int main() {10  //owned by rtl11  void *alloc = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, 100);12  assert(alloc);13  // still owned by rtl14  alloc = HeapReAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, alloc, 100);15  assert(alloc && !__sanitizer_get_ownership(alloc) && HeapValidate(GetProcessHeap(), 0, alloc));16  //convert to asan owned17  void *realloc = HeapReAlloc(GetProcessHeap(), 0, alloc, 500);18  alloc = nullptr;19  assert(realloc && __sanitizer_get_ownership(realloc));20  //convert back to rtl owned;21  alloc = HeapReAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, realloc, 100);22  assert(alloc && !__sanitizer_get_ownership(alloc) && HeapValidate(GetProcessHeap(), 0, alloc));23  printf("Success\n");24}25 26// CHECK-NOT: assert27// CHECK-NOT: AddressSanitizer28// CHECK: Success29