Copied from: https://hg.mozilla.org/releases/mozilla-esr38/rev/6d43ff33bd55 Security advisory: https://www.mozilla.org/en-US/security/advisories/mfsa2016-01/ Mozilla Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1223670 # HG changeset patch # User Karl Tomlinson # Date 1451362442 -46800 # Node ID 6d43ff33bd552b8f7a34e4105cf5bcc0a8c8ea8c # Parent f746c38d160ea29088c15cacae44f3662befaec5 bug 1223670 throw not supported when creating a node from a stream with different channel r=baku a=abillings diff --git a/dom/media/webaudio/MediaStreamAudioSourceNode.cpp b/dom/media/webaudio/MediaStreamAudioSourceNode.cpp --- a/dom/media/webaudio/MediaStreamAudioSourceNode.cpp +++ b/dom/media/webaudio/MediaStreamAudioSourceNode.cpp @@ -51,21 +51,29 @@ MediaStreamAudioSourceNode::Create(Audio } return node.forget(); } void MediaStreamAudioSourceNode::Init(DOMMediaStream* aMediaStream, ErrorResult& aRv) { + MOZ_ASSERT(aMediaStream); + MediaStream* inputStream = aMediaStream->GetStream(); + MediaStreamGraph* graph = Context()->Graph(); + if (NS_WARN_IF(graph != inputStream->Graph())) { + aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR); + return; + } + mInputStream = aMediaStream; AudioNodeEngine* engine = new MediaStreamAudioSourceNodeEngine(this); - mStream = Context()->Graph()->CreateAudioNodeExternalInputStream(engine); + mStream = graph->CreateAudioNodeExternalInputStream(engine); ProcessedMediaStream* outputStream = static_cast(mStream.get()); - mInputPort = outputStream->AllocateInputPort(aMediaStream->GetStream(), + mInputPort = outputStream->AllocateInputPort(inputStream, MediaInputPort::FLAG_BLOCK_INPUT); mInputStream->AddConsumerToKeepAlive(static_cast(this)); PrincipalChanged(mInputStream); // trigger enabling/disabling of the connector mInputStream->AddPrincipalChangeObserver(this); } MediaStreamAudioSourceNode::~MediaStreamAudioSourceNode()