parent
e4cc98686a
commit
aa23bd83e5
|
|
@ -107,6 +107,10 @@ INTERCEPTOR(void *, memcpy, void *dest, const void *src, SIZE_T n) {
|
|||
return __msan_memcpy(dest, src, n);
|
||||
}
|
||||
|
||||
INTERCEPTOR(void *, mempcpy, void *dest, const void *src, SIZE_T n) {
|
||||
return (char *)__msan_memcpy(dest, src, n) + n;
|
||||
}
|
||||
|
||||
INTERCEPTOR(void *, memmove, void *dest, const void *src, SIZE_T n) {
|
||||
return __msan_memmove(dest, src, n);
|
||||
}
|
||||
|
|
@ -449,6 +453,13 @@ INTERCEPTOR(wchar_t *, wmemcpy, wchar_t *dest, const wchar_t *src, SIZE_T n) {
|
|||
return res;
|
||||
}
|
||||
|
||||
INTERCEPTOR(wchar_t *, wmempcpy, wchar_t *dest, const wchar_t *src, SIZE_T n) {
|
||||
ENSURE_MSAN_INITED();
|
||||
wchar_t *res = REAL(wmempcpy)(dest, src, n);
|
||||
__msan_copy_poison(dest, src, n * sizeof(wchar_t));
|
||||
return res;
|
||||
}
|
||||
|
||||
INTERCEPTOR(wchar_t *, wmemset, wchar_t *s, wchar_t c, SIZE_T n) {
|
||||
CHECK(MEM_IS_APP(s));
|
||||
ENSURE_MSAN_INITED();
|
||||
|
|
@ -1143,10 +1154,12 @@ void InitializeInterceptors() {
|
|||
INTERCEPT_FUNCTION(fread_unlocked);
|
||||
INTERCEPT_FUNCTION(readlink);
|
||||
INTERCEPT_FUNCTION(memcpy);
|
||||
INTERCEPT_FUNCTION(mempcpy);
|
||||
INTERCEPT_FUNCTION(memset);
|
||||
INTERCEPT_FUNCTION(memmove);
|
||||
INTERCEPT_FUNCTION(wmemset);
|
||||
INTERCEPT_FUNCTION(wmemcpy);
|
||||
INTERCEPT_FUNCTION(wmempcpy);
|
||||
INTERCEPT_FUNCTION(wmemmove);
|
||||
INTERCEPT_FUNCTION(strcpy); // NOLINT
|
||||
INTERCEPT_FUNCTION(stpcpy); // NOLINT
|
||||
|
|
|
|||
|
|
@ -2485,6 +2485,7 @@ void MemCpyTest() {
|
|||
T *x = new T[N];
|
||||
T *y = new T[N];
|
||||
T *z = new T[N];
|
||||
T *q = new T[N];
|
||||
__msan_poison(x, N * sizeof(T));
|
||||
__msan_set_origin(x, N * sizeof(T), ox);
|
||||
__msan_set_origin(y, N * sizeof(T), 777777);
|
||||
|
|
@ -2495,6 +2496,12 @@ void MemCpyTest() {
|
|||
EXPECT_POISONED_O(y[N/2], ox);
|
||||
EXPECT_POISONED_O(y[N-1], ox);
|
||||
EXPECT_NOT_POISONED(x);
|
||||
void *res = mempcpy(q, x, N * sizeof(T));
|
||||
ASSERT_EQ(q + N, res);
|
||||
EXPECT_POISONED_O(q[0], ox);
|
||||
EXPECT_POISONED_O(q[N/2], ox);
|
||||
EXPECT_POISONED_O(q[N-1], ox);
|
||||
EXPECT_NOT_POISONED(x);
|
||||
memmove(z, x, N * sizeof(T));
|
||||
EXPECT_POISONED_O(z[0], ox);
|
||||
EXPECT_POISONED_O(z[N/2], ox);
|
||||
|
|
|
|||
Loading…
Reference in New Issue