diff options
-rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_allocator.h | 3 | ||||
-rw-r--r-- | compiler-rt/test/asan/TestCases/Darwin/malloc_size_crash.mm | 15 |
2 files changed, 18 insertions, 0 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_allocator.h b/compiler-rt/lib/sanitizer_common/sanitizer_allocator.h index 75fabaa84f3..5783c203da8 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_allocator.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_allocator.h @@ -769,6 +769,9 @@ class SizeClassAllocator32 { } bool PointerIsMine(const void *p) { + uptr mem = reinterpret_cast<uptr>(p); + if (mem < kSpaceBeg || mem >= kSpaceBeg + kSpaceSize) + return false; return GetSizeClass(p) != 0; } diff --git a/compiler-rt/test/asan/TestCases/Darwin/malloc_size_crash.mm b/compiler-rt/test/asan/TestCases/Darwin/malloc_size_crash.mm new file mode 100644 index 00000000000..04cb7637635 --- /dev/null +++ b/compiler-rt/test/asan/TestCases/Darwin/malloc_size_crash.mm @@ -0,0 +1,15 @@ +// RUN: %clang_asan %s -o %t -framework Foundation +// RUN: %run %t 2>&1 | FileCheck %s + +#import <Foundation/Foundation.h> +#include <malloc/malloc.h> + +int main(int argc, char *argv[]) { + id obj = @0; + fprintf(stderr, "obj = %p\n", obj); + size_t size = malloc_size(obj); + fprintf(stderr, "size = 0x%zx\n", size); + fprintf(stderr, "Done.\n"); + // CHECK: Done. + return 0; +} |