Skip to content

Commit 4d1f8ef

Browse files
committed
read: add bounds checks during extent merge to prevent buffer overflow
Validate write offsets and per-extent copy sizes before memcpy when merging item extents to avoid out-of-bounds writes triggered by malformed or malicious AVIF metadata. Reject invalid extents with AVIF_RESULT_BMFF_PARSE_FAILED.
1 parent 2a4a06f commit 4d1f8ef

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

src/read.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1535,6 +1535,17 @@ static avifResult avifDecoderItemRead(avifDecoderItem * item,
15351535
} else {
15361536
AVIF_ASSERT_OR_RETURN(item->ownsMergedExtents);
15371537
AVIF_ASSERT_OR_RETURN(front);
1538+
// Validate that the write will not exceed the allocated buffer
1539+
if ((size_t)(front - item->mergedExtents.data) > item->mergedExtents.size ||
1540+
bytesToRead > item->mergedExtents.size - (size_t)(front - item->mergedExtents.data)) {
1541+
avifDiagnosticsPrintf(diag,
1542+
"Item ID %u extent would overflow merge buffer (buffer size: %zu, current offset: %zu, bytes to write: %zu)",
1543+
item->id,
1544+
item->mergedExtents.size,
1545+
(size_t)(front - item->mergedExtents.data),
1546+
bytesToRead);
1547+
return AVIF_RESULT_BMFF_PARSE_FAILED;
1548+
}
15381549
memcpy(front, offsetBuffer.data, bytesToRead);
15391550
front += bytesToRead;
15401551
}

0 commit comments

Comments
 (0)