OfflineAudioContext does not validate allocation of destination buffer
[WebKit-https.git] / Source / WebCore / Modules / webaudio / OfflineAudioContext.cpp
index ef78ce7..11be75a 100644 (file)
@@ -35,8 +35,8 @@ namespace WebCore {
 
 WTF_MAKE_ISO_ALLOCATED_IMPL(OfflineAudioContext);
 
-inline OfflineAudioContext::OfflineAudioContext(Document& document, unsigned numberOfChannels, size_t numberOfFrames, float sampleRate)
-    : AudioContext(document, numberOfChannels, numberOfFrames, sampleRate)
+inline OfflineAudioContext::OfflineAudioContext(Document& document, AudioBuffer* renderTarget)
+    : AudioContext(document, renderTarget)
 {
 }
 
@@ -47,7 +47,11 @@ ExceptionOr<Ref<OfflineAudioContext>> OfflineAudioContext::create(ScriptExecutio
         return Exception { NotSupportedError };
     if (!numberOfChannels || numberOfChannels > 10 || !numberOfFrames || !isSampleRateRangeGood(sampleRate))
         return Exception { SyntaxError };
-    auto audioContext = adoptRef(*new OfflineAudioContext(downcast<Document>(context), numberOfChannels, numberOfFrames, sampleRate));
+    auto renderTarget = AudioBuffer::create(numberOfChannels, numberOfFrames, sampleRate);
+    if (!renderTarget)
+        return Exception { SyntaxError };
+
+    auto audioContext = adoptRef(*new OfflineAudioContext(downcast<Document>(context), renderTarget.get()));
     audioContext->suspendIfNeeded();
     return audioContext;
 }