Commit aa281e0a authored by Raymond Toy's avatar Raymond Toy Committed by Commit Bot

Replace memcopy with memmove for overlapping copies

copyFromChannel can produce overlapping areas when the source array is
the same as the channel data array.  Use memmove instead of memcpy to
handle this case.  copyToChannel has the same issue, so fix that too.

Manually tested the repro case with a local asan build.  The issue no
longer reproduces.

Bug: 1081722
Change-Id: I168ef418fccf45646bb4d8a01c22cecfbd5da20b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2202394Reviewed-by: default avatarHongchan Choi <hongchan@chromium.org>
Commit-Queue: Raymond Toy <rtoy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#769034}
parent ab9d34c3
...@@ -254,7 +254,7 @@ void AudioBuffer::copyFromChannel(NotShared<DOMFloat32Array> destination, ...@@ -254,7 +254,7 @@ void AudioBuffer::copyFromChannel(NotShared<DOMFloat32Array> destination,
DCHECK_LE(count, data_length); DCHECK_LE(count, data_length);
DCHECK_LE(buffer_offset + count, data_length); DCHECK_LE(buffer_offset + count, data_length);
memcpy(dst, src + buffer_offset, count * sizeof(*src)); memmove(dst, src + buffer_offset, count * sizeof(*src));
} }
void AudioBuffer::copyToChannel(NotShared<DOMFloat32Array> source, void AudioBuffer::copyToChannel(NotShared<DOMFloat32Array> source,
...@@ -297,7 +297,7 @@ void AudioBuffer::copyToChannel(NotShared<DOMFloat32Array> source, ...@@ -297,7 +297,7 @@ void AudioBuffer::copyToChannel(NotShared<DOMFloat32Array> source,
DCHECK_LE(buffer_offset + count, channel_data->lengthAsSizeT()); DCHECK_LE(buffer_offset + count, channel_data->lengthAsSizeT());
DCHECK_LE(count, source.View()->lengthAsSizeT()); DCHECK_LE(count, source.View()->lengthAsSizeT());
memcpy(dst + buffer_offset, src, count * sizeof(*dst)); memmove(dst + buffer_offset, src, count * sizeof(*dst));
} }
void AudioBuffer::Zero() { void AudioBuffer::Zero() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment