summaryrefslogtreecommitdiff
path: root/lib/msan/msan_interceptors.cc
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-07-02 13:34:44 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-07-02 13:34:44 +0000
commit801448950d645813efb398575bbc62b48e5b1dfc (patch)
treede606d5a59cd0b4f55abf2ee11670a5bb9c76cac /lib/msan/msan_interceptors.cc
parent3cae6040ebb4ce14123b8ba000b79b4383dbd48a (diff)
downloadcompiler-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.cc25
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);