From 1a03ccd848b5d59ad96601821a073edab9cecde1 Mon Sep 17 00:00:00 2001 From: Kuba Brecka Date: Fri, 9 Jan 2015 00:26:45 +0000 Subject: [PATCH] [asan] Adding a regression test for https://code.google.com/p/address-sanitizer/issues/detail?id=368 llvm-svn: 225484 --- .../TestCases/Darwin/address-range-limit.mm | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 compiler-rt/test/asan/TestCases/Darwin/address-range-limit.mm diff --git a/compiler-rt/test/asan/TestCases/Darwin/address-range-limit.mm b/compiler-rt/test/asan/TestCases/Darwin/address-range-limit.mm new file mode 100644 index 000000000000..a6906766d7ee --- /dev/null +++ b/compiler-rt/test/asan/TestCases/Darwin/address-range-limit.mm @@ -0,0 +1,38 @@ +// Regression test for https://code.google.com/p/address-sanitizer/issues/detail?id=368. + +// RUN: %clang_asan %s -Wno-deprecated-declarations -flat_namespace -bundle -undefined suppress -o %t.bundle +// RUN: %clang_asan %s -Wno-deprecated-declarations -o %t -framework Foundation && not %run %t 2>&1 | FileCheck %s + +#import +#import + +#include + +int main(int argc, char *argv[]) { + for (int i = 0; i < 10; i++) { + NSObjectFileImage im; + + std::string path = std::string(argv[0]) + ".bundle"; + NSObjectFileImageReturnCode rc = + NSCreateObjectFileImageFromFile(path.c_str(), &im); + if (rc != NSObjectFileImageSuccess) { + fprintf(stderr, "Could not load bundle.\n"); + exit(-1); + } + + NSModule handle = NSLinkModule(im, "a.bundle", 0); + if (handle == 0) { + fprintf(stderr, "Could not load bundle.\n"); + exit(-1); + } + printf("h: %p\n", handle); + } + + char *ptr = (char *)malloc(10); + ptr[10] = 'x'; // BOOM +} + +// CHECK: AddressSanitizer: heap-buffer-overflow +// CHECK: WRITE of size 1 +// CHECK: {{#0 .* in main}} +// CHECK: is located 0 bytes to the right of 10-byte region