forked from OSchip/llvm-project
[sanitizer] Add early call handling to strlen interceptor
Summary: The strlen interceptor is sometimes invoked too early for REAL(strlen) to be initialized. A special check is added to use internal_strlen for this situation. Reviewers: dim Subscribers: llvm-commits, samsonov Differential Revision: http://reviews.llvm.org/D18851 Change-Id: I3acc58f4abbae1904f25324abd84efea67aad0a2 llvm-svn: 265705
This commit is contained in:
parent
42795bdc76
commit
a7685389c8
|
@ -206,6 +206,12 @@ UNUSED static void DeleteInterceptorMetadata(void *addr) {
|
|||
|
||||
#if SANITIZER_INTERCEPT_STRLEN
|
||||
INTERCEPTOR(SIZE_T, strlen, const char *s) {
|
||||
// Sometimes strlen is called prior to InitializeCommonInterceptors,
|
||||
// in which case the REAL(strlen) typically used in
|
||||
// COMMON_INTERCEPTOR_ENTER will fail. We use internal_strlen here
|
||||
// to handle that.
|
||||
if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED)
|
||||
return internal_strlen(s);
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, strlen, s);
|
||||
SIZE_T result = REAL(strlen)(s);
|
||||
|
|
Loading…
Reference in New Issue