diff options
author | Alexander Potapenko <glider@google.com> | 2012-10-26 13:24:20 +0000 |
---|---|---|
committer | Alexander Potapenko <glider@google.com> | 2012-10-26 13:24:20 +0000 |
commit | 341588afadc46bf6f0dc7babd6d531209aba5202 (patch) | |
tree | 79814be02a0cb28b9aacdcd17820c20ae8551103 /lib/sanitizer_common/sanitizer_libc.cc | |
parent | f70848decb000cc0e4c05a27eed78865d2f38555 (diff) |
Fix the internal_memmove() implementation that used to skip src[0] if dst < src.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@166774 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_libc.cc')
-rw-r--r-- | lib/sanitizer_common/sanitizer_libc.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/sanitizer_common/sanitizer_libc.cc b/lib/sanitizer_common/sanitizer_libc.cc index cb36d2cb3..537c30b82 100644 --- a/lib/sanitizer_common/sanitizer_libc.cc +++ b/lib/sanitizer_common/sanitizer_libc.cc @@ -47,13 +47,14 @@ void *internal_memcpy(void *dest, const void *src, uptr n) { void *internal_memmove(void *dest, const void *src, uptr n) { char *d = (char*)dest; char *s = (char*)src; - uptr i; + sptr i = (sptr)n; + CHECK_GE(i, 0); if (d < s) { for (i = 0; i < n; ++i) d[i] = s[i]; } else { if (d > s && n > 0) - for (i = n - 1; i > 0 ; --i) { + for (i = n - 1; i >= 0 ; --i) { d[i] = s[i]; } } |