summaryrefslogtreecommitdiffstats
path: root/dom/media/webaudio
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@wolfbeast.com>2020-05-10 14:37:50 +0200
committerMoonchild <moonchild@palemoon.org>2020-05-20 13:47:45 +0000
commitaeef4240d598a6e0e8be35c854ad26ff6d77fa3f (patch)
treec75da0be0a9fd7aa982972f6041f4c141786e7cf /dom/media/webaudio
parent938e6204efb8f47f8426aeb114c41d333e696d1a (diff)
downloadUXP-aeef4240d598a6e0e8be35c854ad26ff6d77fa3f.tar
UXP-aeef4240d598a6e0e8be35c854ad26ff6d77fa3f.tar.gz
UXP-aeef4240d598a6e0e8be35c854ad26ff6d77fa3f.tar.lz
UXP-aeef4240d598a6e0e8be35c854ad26ff6d77fa3f.tar.xz
UXP-aeef4240d598a6e0e8be35c854ad26ff6d77fa3f.zip
Issue #1589 - Ensure computed length and data is always available
Diffstat (limited to 'dom/media/webaudio')
-rw-r--r--dom/media/webaudio/AudioBuffer.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/dom/media/webaudio/AudioBuffer.cpp b/dom/media/webaudio/AudioBuffer.cpp
index e4252dfcf..39fe8c735 100644
--- a/dom/media/webaudio/AudioBuffer.cpp
+++ b/dom/media/webaudio/AudioBuffer.cpp
@@ -254,6 +254,9 @@ void
AudioBuffer::CopyFromChannel(const Float32Array& aDestination, uint32_t aChannelNumber,
uint32_t aStartInChannel, ErrorResult& aRv)
{
+ JS::AutoCheckCannotGC nogc;
+ aDestination.ComputeLengthAndData();
+
uint32_t length = aDestination.Length();
CheckedInt<uint32_t> end = aStartInChannel;
end += length;
@@ -263,8 +266,6 @@ AudioBuffer::CopyFromChannel(const Float32Array& aDestination, uint32_t aChannel
return;
}
- JS::AutoCheckCannotGC nogc;
- aDestination.ComputeLengthAndData();
JSObject* channelArray = mJSChannels[aChannelNumber];
const float* sourceData = nullptr;
if (channelArray) {
@@ -295,6 +296,9 @@ AudioBuffer::CopyToChannel(JSContext* aJSContext, const Float32Array& aSource,
uint32_t aChannelNumber, uint32_t aStartInChannel,
ErrorResult& aRv)
{
+ JS::AutoCheckCannotGC nogc;
+ aSource.ComputeLengthAndData();
+
uint32_t length = aSource.Length();
CheckedInt<uint32_t> end = aStartInChannel;
end += length;
@@ -309,7 +313,6 @@ AudioBuffer::CopyToChannel(JSContext* aJSContext, const Float32Array& aSource,
return;
}
- JS::AutoCheckCannotGC nogc;
JSObject* channelArray = mJSChannels[aChannelNumber];
if (JS_GetTypedArrayLength(channelArray) != mLength) {
// The array's buffer was detached.
@@ -317,7 +320,6 @@ AudioBuffer::CopyToChannel(JSContext* aJSContext, const Float32Array& aSource,
return;
}
- aSource.ComputeLengthAndData();
bool isShared = false;
float* channelData = JS_GetFloat32ArrayData(channelArray, &isShared, nogc);
// The channelData arrays should all have originated in