Detect invalid box size in avifRWStreamFinishBox()
Unfortunately avifRWStreamFinishBox() returns void and there are a lot
of avifRWStreamFinishBox() calls, so have avifRWStreamFinishBox() call
abort() on an invalid box size for now.
diff --git a/src/stream.c b/src/stream.c
index 60e6aa3..d1aa495 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -429,7 +429,16 @@
void avifRWStreamFinishBox(avifRWStream * stream, avifBoxMarker marker)
{
assert(stream->numUsedBitsInPartialByte == 0); // Byte alignment is required.
- uint32_t noSize = avifHTONL((uint32_t)(stream->offset - marker));
+ size_t boxSize = stream->offset - marker;
+ // Since marker comes from a previous avifRWStreamWriteBox() or
+ // avifRWStreamWriteFullBox() call, boxSize must be >= the size of the size
+ // and type fields. This implies that boxSize cannot be equal to the two
+ // special values 0 and 1.
+ assert(boxSize >= sizeof(uint32_t) + 4);
+ if (boxSize > UINT32_MAX) {
+ abort();
+ }
+ uint32_t noSize = avifHTONL((uint32_t)boxSize);
memcpy(stream->raw->data + marker, &noSize, sizeof(uint32_t));
}