17c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// Check that without suppressions, we catch the issue.
27c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN: %clangxx_asan -O0 %s -o %t
37c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN: not %run %t 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s
47c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
57c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// If the executable is started from a different location, we should still
67c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// find the suppression file located relative to the location of the executable.
77c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN: rm -rf %T/suppressions-exec-relative-location
87c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN: mkdir -p %T/suppressions-exec-relative-location
97c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN: %clangxx_asan -O0 %s -o %T/suppressions-exec-relative-location/exec
107c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN: echo "interceptor_via_fun:crash_function" > \
117c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN:   %T/suppressions-exec-relative-location/supp.txt
123d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar// RUN: %env_asan_opts=suppressions='"supp.txt"' \
137c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN:   %run %T/suppressions-exec-relative-location/exec 2>&1 | \
147c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN:   FileCheck --check-prefix=CHECK-IGNORE %s
157c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN: rm -rf %T/suppressions-exec-relative-location
167c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
177c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// If the wrong absolute path is given, we don't try to construct
187c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// a relative path with it.
193d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar// RUN: %env_asan_opts=suppressions='"/absolute/path"' not %run %t 2>&1 | \
207c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN:   FileCheck --check-prefix=CHECK-WRONG-FILE-NAME %s
217c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
227c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// Test that we reject directory as filename.
233d763c0d3700e73b3aead8e65e04ec28efc56138Pirama Arumuga Nainar// RUN: %env_asan_opts=suppressions='"folder/only/"' not %run %t 2>&1 | \
247c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// RUN:   FileCheck --check-prefix=CHECK-WRONG-FILE-NAME %s
257c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
267c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// XFAIL: android
277c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// XFAIL: win32
287c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
297c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar#include <stdio.h>
307c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar#include <stdlib.h>
317c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar#include <string.h>
327c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
337c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainarvoid crash_function() {
347c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  char *a = (char *)malloc(6);
357c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  free(a);
367c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  size_t len = strlen(a); // BOOM
377c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  fprintf(stderr, "strlen ignored, len = %zu\n", len);
387c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar}
397c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
407c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainarint main() {
417c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  crash_function();
427c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar}
437c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
447c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// CHECK-CRASH: AddressSanitizer: heap-use-after-free
457c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// CHECK-IGNORE-NOT: AddressSanitizer: heap-buffer-overflow
467c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// CHECK-IGNORE: ignored
477c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// CHECK-WRONG-FILE-NAME: failed to read suppressions file
48