Protect against passing invalid (0 byte) samples to codecs
Fixes oss-fuzz issue: 23940
diff --git a/src/read.c b/src/read.c
index c83ce86..6e4212e 100644
--- a/src/read.c
+++ b/src/read.c
@@ -2312,6 +2312,18 @@
decoder->alphaPresent = (alphaOBUItem != NULL);
}
+ // Sanity check tiles
+ for (uint32_t tileIndex = 0; tileIndex < data->tiles.count; ++tileIndex) {
+ avifTile * tile = &data->tiles.tile[tileIndex];
+ for (uint32_t sampleIndex = 0; sampleIndex < tile->input->samples.count; ++sampleIndex) {
+ avifDecodeSample * sample = &tile->input->samples.sample[0];
+ if (!sample->data.data || !sample->data.size) {
+ // Every sample must have some data
+ return AVIF_RESULT_BMFF_PARSE_FAILED;
+ }
+ }
+ }
+
const avifProperty * colrProp = avifPropertyArrayFind(colorProperties, "colr");
if (colrProp) {
if (colrProp->u.colr.hasICC) {