1c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines// Test strict_string_checks option in strcasestr function 2c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines// RUN: %clang_asan %s -o %t && %run %t 2>&1 3c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines// RUN: %env_asan_opts=strict_string_checks=false %run %t 2>&1 4c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines// RUN: %env_asan_opts=strict_string_checks=true not %run %t 2>&1 | FileCheck %s 5c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 6c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines// There's no interceptor for strcasestr on Windows 7c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines// XFAIL: win32 8c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 9c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#define _GNU_SOURCE 10c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#include <assert.h> 11c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#include <stdlib.h> 12c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#include <string.h> 13c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 14c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesint main(int argc, char **argv) { 15c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines size_t size = 100; 16c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines char *s1 = (char*)malloc(size); 176948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar char *s2 = (char*)malloc(size); 186948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar memset(s1, 'o', size); 196948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar memset(s2, 'O', size); 20c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines s2[size - 1]='\0'; 216948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar char* r = strcasestr(s1, s2); 22c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines // CHECK: {{.*ERROR: AddressSanitizer: heap-buffer-overflow on address}} 236948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // CHECK: READ of size 101 24c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines assert(r == s1); 25c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines free(s1); 266948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar free(s2); 276948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return 0; 286948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar} 29c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines