Bug 1287397 - Fix wave chunk size overflow; r=cpearce
MozReview-Commit-ID: Dg1OT13urxe
--- a/dom/media/wave/WaveDemuxer.cpp
+++ b/dom/media/wave/WaveDemuxer.cpp
@@ -108,18 +108,16 @@ WAVTrackDemuxer::Init()
while (true) {
if (!HeaderParserInit()) {
return false;
}
uint32_t aChunkName = mHeaderParser.GiveHeader().ChunkName();
uint32_t aChunkSize = mHeaderParser.GiveHeader().ChunkSize();
- aChunkSize += aChunkSize % 2;
-
if (aChunkName == FRMT_CODE) {
if (!FmtChunkParserInit()) {
return false;
}
} else if (aChunkName == LIST_CODE) {
mHeaderParser.Reset();
uint64_t endOfListChunk = static_cast<uint64_t>(mOffset) + aChunkSize;
if (endOfListChunk > UINT32_MAX) {
@@ -130,17 +128,18 @@ WAVTrackDemuxer::Init()
}
} else if (aChunkName == DATA_CODE) {
mDataLength = aChunkSize;
if (mFirstChunkOffset != mOffset) {
mFirstChunkOffset = mOffset;
}
break;
} else {
- mOffset += aChunkSize; // Skip other irrelevant chunks.
+ // Wave files are 2-byte aligned so we need to round up
+ mOffset += (aChunkSize + 1) & ~1; // Skip other irrelevant chunks.
}
mHeaderParser.Reset();
}
if (mDataLength > StreamLength() - mFirstChunkOffset) {
mDataLength = StreamLength() - mFirstChunkOffset;
}