diff options
author | Timur Iskhodzhanov <timurrrr@google.com> | 2012-02-14 19:33:04 +0000 |
---|---|---|
committer | Timur Iskhodzhanov <timurrrr@google.com> | 2012-02-14 19:33:04 +0000 |
commit | d2a9075de0a21548b9f01d24ed309bc5cb26f99f (patch) | |
tree | 0af6f82cab81f1c4f9ce67b55672135e84406251 | |
parent | bce36774f031b316c82a2e837bd9c6df1ec9b630 (diff) | |
download | bcm5719-llvm-d2a9075de0a21548b9f01d24ed309bc5cb26f99f.tar.gz bcm5719-llvm-d2a9075de0a21548b9f01d24ed309bc5cb26f99f.zip |
[ASan] Define an internal implementation of strchr to make stack OOB tests pass on Windows
llvm-svn: 150499
-rw-r--r-- | compiler-rt/lib/asan/asan_interceptors.cc | 10 | ||||
-rw-r--r-- | compiler-rt/lib/asan/asan_interceptors.h | 1 | ||||
-rw-r--r-- | compiler-rt/lib/asan/asan_rtl.cc | 2 |
3 files changed, 12 insertions, 1 deletions
diff --git a/compiler-rt/lib/asan/asan_interceptors.cc b/compiler-rt/lib/asan/asan_interceptors.cc index b2d437590e9..cb2a8bdc226 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cc +++ b/compiler-rt/lib/asan/asan_interceptors.cc @@ -120,6 +120,16 @@ size_t internal_strnlen(const char *s, size_t maxlen) { return i; } +char* internal_strchr(const char *s, int c) { + while (true) { + if (*s == (char)c) + return (char*)s; + if (*s == 0) + return NULL; + s++; + } +} + void* internal_memchr(const void* s, int c, size_t n) { const char* t = (char*)s; for (size_t i = 0; i < n; ++i, ++t) diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index 93ec87b0bb7..012c9ab3e65 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -33,6 +33,7 @@ namespace __asan { // __asan::internal_X() is the implementation of X() for use in RTL. size_t internal_strlen(const char *s); size_t internal_strnlen(const char *s, size_t maxlen); +char* internal_strchr(const char *s, int c); void* internal_memchr(const void* s, int c, size_t n); int internal_memcmp(const void* s1, const void* s2, size_t n); char *internal_strstr(const char *haystack, const char *needle); diff --git a/compiler-rt/lib/asan/asan_rtl.cc b/compiler-rt/lib/asan/asan_rtl.cc index 4d3eb6e3770..b8c485e3458 100644 --- a/compiler-rt/lib/asan/asan_rtl.cc +++ b/compiler-rt/lib/asan/asan_rtl.cc @@ -159,7 +159,7 @@ static bool DescribeStackAddress(uintptr_t addr, uintptr_t access_size) { // where alloc_i looks like "offset size len ObjectName ". CHECK(frame_descr); // Report the function name and the offset. - const char *name_end = REAL(strchr)(frame_descr, ' '); + const char *name_end = internal_strchr(frame_descr, ' '); CHECK(name_end); buf[0] = 0; internal_strncat(buf, frame_descr, |