1*7c3d14c8STreehugger Robot // RUN: %clangxx_asan -O0 -DSHARED_LIB %s -fPIC -shared -o %dynamiclib %ld_flags_rpath_so 2*7c3d14c8STreehugger Robot // RUN: %clangxx_asan -O0 %s -o %t %ld_flags_rpath_exe 3*7c3d14c8STreehugger Robot 4*7c3d14c8STreehugger Robot // Check that without suppressions, we catch the issue. 5*7c3d14c8STreehugger Robot // RUN: not %run %t 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s 6*7c3d14c8STreehugger Robot 7*7c3d14c8STreehugger Robot // FIXME: Remove usage of backticks around basename below. 8*7c3d14c8STreehugger Robot // REQUIRES: shell 9*7c3d14c8STreehugger Robot 10*7c3d14c8STreehugger Robot // RUN: echo "interceptor_via_lib:"`basename %dynamiclib` > %t.supp 11*7c3d14c8STreehugger Robot // RUN: %env_asan_opts=suppressions='"%t.supp"' %run %t 2>&1 | FileCheck --check-prefix=CHECK-IGNORE %s 12*7c3d14c8STreehugger Robot 13*7c3d14c8STreehugger Robot // XFAIL: android 14*7c3d14c8STreehugger Robot 15*7c3d14c8STreehugger Robot #include <stdio.h> 16*7c3d14c8STreehugger Robot #include <stdlib.h> 17*7c3d14c8STreehugger Robot #include <string.h> 18*7c3d14c8STreehugger Robot 19*7c3d14c8STreehugger Robot #if !defined(SHARED_LIB) 20*7c3d14c8STreehugger Robot 21*7c3d14c8STreehugger Robot void crash_function(); 22*7c3d14c8STreehugger Robot main(int argc,char * argv[])23*7c3d14c8STreehugger Robotint main(int argc, char *argv[]) { 24*7c3d14c8STreehugger Robot crash_function(); 25*7c3d14c8STreehugger Robot return 0; 26*7c3d14c8STreehugger Robot } 27*7c3d14c8STreehugger Robot 28*7c3d14c8STreehugger Robot #else // SHARED_LIB 29*7c3d14c8STreehugger Robot crash_function()30*7c3d14c8STreehugger Robotvoid crash_function() { 31*7c3d14c8STreehugger Robot char *a = (char *)malloc(6); 32*7c3d14c8STreehugger Robot free(a); 33*7c3d14c8STreehugger Robot size_t len = strlen(a); // BOOM 34*7c3d14c8STreehugger Robot fprintf(stderr, "strlen ignored, %zu\n", len); 35*7c3d14c8STreehugger Robot } 36*7c3d14c8STreehugger Robot 37*7c3d14c8STreehugger Robot #endif // SHARED_LIB 38*7c3d14c8STreehugger Robot 39*7c3d14c8STreehugger Robot // CHECK-CRASH: AddressSanitizer: heap-use-after-free 40*7c3d14c8STreehugger Robot // CHECK-CRASH-NOT: strlen ignored 41*7c3d14c8STreehugger Robot // CHECK-IGNORE-NOT: AddressSanitizer: heap-use-after-free 42*7c3d14c8STreehugger Robot // CHECK-IGNORE: strlen ignored 43