commit 570ec34c7ace0099bc87b3c2c1fa71588c0fbcc6
parent e8f3db7856c69758dc84834bdaf809fe932f9458
Author: Chun-Min Chang <chun.m.chang@gmail.com>
Date: Wed, 3 Dec 2025 17:40:34 +0000
Bug 1999390 - Construct no EncodedVideoChunk if requested size is invalid r=media-playback-reviewers,alwu
Differential Revision: https://phabricator.services.mozilla.com/D273931
Diffstat:
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/dom/media/webcodecs/EncodedVideoChunk.cpp b/dom/media/webcodecs/EncodedVideoChunk.cpp
@@ -155,15 +155,15 @@ already_AddRefed<EncodedVideoChunk> EncodedVideoChunk::Constructor(
return nullptr;
}
- auto buffer = ProcessTypedArrays(
+ auto res = ProcessTypedArrays(
aInit.mData,
- [&](const Span<uint8_t>& aData,
- JS::AutoCheckCannotGC&&) -> RefPtr<MediaAlignedByteBuffer> {
+ [&](const Span<uint8_t>& aData, JS::AutoCheckCannotGC&&)
+ -> Result<RefPtr<MediaAlignedByteBuffer>, MediaResult> {
// Make sure it's in uint32_t's range.
CheckedUint32 byteLength(aData.Length());
if (!byteLength.isValid()) {
- aRv.Throw(NS_ERROR_INVALID_ARG);
- return nullptr;
+ return Err(MediaResult(NS_ERROR_INVALID_ARG,
+ "requested size exceeds uint32_t limit"));
}
if (aData.Length() == 0) {
LOGW("Buffer for constructing EncodedVideoChunk is empty!");
@@ -174,12 +174,21 @@ already_AddRefed<EncodedVideoChunk> EncodedVideoChunk::Constructor(
// Instead of checking *buf, size comparision is used to allow
// constructing a zero-sized EncodedVideoChunk.
if (!buf || buf->Size() != aData.Length()) {
- aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
- return nullptr;
+ return Err(MediaResult(NS_ERROR_OUT_OF_MEMORY,
+ "failed to allocate buffer: OOM or "
+ "exceeds internal size limit"));
}
return buf;
});
+ if (res.isErr()) {
+ MediaResult err = res.unwrapErr();
+ LOGE("Failed to process buffer for EncodedVideoChunk constructor: %s",
+ err.Description().get());
+ aRv.Throw(err.Code());
+ return nullptr;
+ }
+ RefPtr<MediaAlignedByteBuffer> buffer = res.unwrap();
RefPtr<EncodedVideoChunk> chunk(new EncodedVideoChunk(
global, buffer.forget(), aInit.mType, aInit.mTimestamp,
OptionalToMaybe(aInit.mDuration)));