diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-07-02 13:34:44 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-07-02 13:34:44 +0000 |
commit | 801448950d645813efb398575bbc62b48e5b1dfc (patch) | |
tree | de606d5a59cd0b4f55abf2ee11670a5bb9c76cac /lib/msan/msan_interceptors.cc | |
parent | 3cae6040ebb4ce14123b8ba000b79b4383dbd48a (diff) | |
download | compiler-rt-801448950d645813efb398575bbc62b48e5b1dfc.tar.gz compiler-rt-801448950d645813efb398575bbc62b48e5b1dfc.tar.bz2 compiler-rt-801448950d645813efb398575bbc62b48e5b1dfc.tar.xz |
[sanitizer] Intercept mbtowc, mbrtowc, get_current_dir_name.
Move getcwd to common interceptors.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@185424 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/msan/msan_interceptors.cc')
-rw-r--r-- | lib/msan/msan_interceptors.cc | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc index 04764b5d..720c6357 100644 --- a/lib/msan/msan_interceptors.cc +++ b/lib/msan/msan_interceptors.cc @@ -405,6 +405,20 @@ INTERCEPTOR(SIZE_T, mbstowcs, wchar_t *dest, const char *src, SIZE_T n) { return res; } +INTERCEPTOR(int, mbtowc, wchar_t *dest, const char *src, SIZE_T n) { + ENSURE_MSAN_INITED(); + int res = REAL(mbtowc)(dest, src, n); + if (res != -1 && dest) __msan_unpoison(dest, sizeof(wchar_t)); + return res; +} + +INTERCEPTOR(int, mbrtowc, wchar_t *dest, const char *src, SIZE_T n, void *ps) { + ENSURE_MSAN_INITED(); + SIZE_T res = REAL(mbrtowc)(dest, src, n, ps); + if (res != (SIZE_T)-1 && dest) __msan_unpoison(dest, sizeof(wchar_t)); + return res; +} + INTERCEPTOR(SIZE_T, wcslen, const wchar_t *s) { ENSURE_MSAN_INITED(); SIZE_T res = REAL(wcslen)(s); @@ -605,14 +619,6 @@ INTERCEPTOR(char *, fgets_unlocked, char *s, int size, void *stream) { return res; } -INTERCEPTOR(char *, getcwd, char *buf, SIZE_T size) { - ENSURE_MSAN_INITED(); - char *res = REAL(getcwd)(buf, size); - if (res) - __msan_unpoison(res, REAL(strlen)(res) + 1); - return res; -} - INTERCEPTOR(char *, realpath, char *path, char *abspath) { ENSURE_MSAN_INITED(); char *res = REAL(realpath)(path, abspath); @@ -1172,6 +1178,8 @@ void InitializeInterceptors() { INTERCEPT_FUNCTION(strftime); INTERCEPT_FUNCTION(wcstombs); INTERCEPT_FUNCTION(mbstowcs); + INTERCEPT_FUNCTION(mbtowc); + INTERCEPT_FUNCTION(mbrtowc); INTERCEPT_FUNCTION(wcslen); INTERCEPT_FUNCTION(wcschr); INTERCEPT_FUNCTION(wcscpy); @@ -1191,7 +1199,6 @@ void InitializeInterceptors() { INTERCEPT_FUNCTION(socketpair); INTERCEPT_FUNCTION(fgets); INTERCEPT_FUNCTION(fgets_unlocked); - INTERCEPT_FUNCTION(getcwd); INTERCEPT_FUNCTION(realpath); INTERCEPT_FUNCTION(getrlimit); INTERCEPT_FUNCTION(getrlimit64); |