Bug 1308434 - Throw TypeError if calling decodeAudioData on a detached buffer. r=padenot,dminor

MozReview-Commit-ID: JxFyFCECTeK

--HG--
extra : rebase_source : c69df64616cfe014684f1049c6e2b2b84b899b64
This commit is contained in:
Beekill95 2017-01-21 13:11:46 +07:00
parent 87e23bd975
commit 0dc2d443bb
2 changed files with 7 additions and 0 deletions

View File

@ -88,6 +88,7 @@ MSG_DEF(MSG_IS_NOT_PROMISE, 1, JSEXN_TYPEERR, "{0} is not a Promise")
MSG_DEF(MSG_SW_INSTALL_ERROR, 2, JSEXN_TYPEERR, "ServiceWorker script at {0} for scope {1} encountered an error during installation.")
MSG_DEF(MSG_SW_SCRIPT_THREW, 2, JSEXN_TYPEERR, "ServiceWorker script at {0} for scope {1} threw an exception during script evaluation.")
MSG_DEF(MSG_TYPEDARRAY_IS_SHARED, 1, JSEXN_TYPEERR, "{0} can't be a typed array on SharedArrayBuffer")
MSG_DEF(MSG_TYPEDARRAY_IS_DETACHED, 1, JSEXN_TYPEERR, "{0} can't be a detached buffer")
MSG_DEF(MSG_CACHE_ADD_FAILED_RESPONSE, 3, JSEXN_TYPEERR, "Cache got {0} response with bad status {1} while trying to add request {2}")
MSG_DEF(MSG_SW_UPDATE_BAD_REGISTRATION, 2, JSEXN_TYPEERR, "Failed to update the ServiceWorker for scope {0} because the registration has been {1} since the update was scheduled.")
MSG_DEF(MSG_INVALID_DURATION_ERROR, 1, JSEXN_TYPEERR, "Invalid duration '{0}'.")

View File

@ -521,6 +521,12 @@ AudioContext::DecodeAudioData(const ArrayBuffer& aBuffer,
return nullptr;
}
if (!aBuffer.Data()) {
// Throw if the buffer is detached
aRv.ThrowTypeError<MSG_TYPEDARRAY_IS_DETACHED>(NS_LITERAL_STRING("Argument of AudioContext.decodeAudioData"));
return nullptr;
}
// Detach the array buffer
size_t length = aBuffer.Length();
JS::RootedObject obj(cx, aBuffer.Obj());