Call avifMetaFindItem() a bit earlier in avifParseItemLocationBox() to avoid a temporary variable
diff --git a/src/read.c b/src/read.c index 8b7bb05..7bfd874 100644 --- a/src/read.c +++ b/src/read.c
@@ -1500,7 +1500,6 @@ } for (uint32_t i = 0; i < itemCount; ++i) { uint32_t itemID; - avifBool idatStored = AVIF_FALSE; if (version < 2) { CHECK(avifROStreamReadU16(&s, &tmp16)); // unsigned int(16) item_ID; itemID = tmp16; @@ -1508,6 +1507,17 @@ CHECK(avifROStreamReadU32(&s, &itemID)); // unsigned int(32) item_ID; } + avifDecoderItem * item = avifMetaFindItem(meta, itemID); + if (!item) { + avifDiagnosticsPrintf(diag, "Box[iloc] has an invalid item ID [%u]", itemID); + return AVIF_FALSE; + } + if (item->extents.count > 0) { + // This item has already been given extents via this iloc box. This is invalid. + avifDiagnosticsPrintf(diag, "Item ID [%u] contains duplicate sets of extents", itemID); + return AVIF_FALSE; + } + if ((version == 1) || (version == 2)) { uint8_t ignored; uint8_t constructionMethod; @@ -1520,22 +1530,10 @@ return AVIF_FALSE; } if (constructionMethod == 1) { - idatStored = AVIF_TRUE; + item->idatStored = AVIF_TRUE; } } - avifDecoderItem * item = avifMetaFindItem(meta, itemID); - if (!item) { - avifDiagnosticsPrintf(diag, "Box[iloc] has an invalid item ID [%u]", itemID); - return AVIF_FALSE; - } - if (item->extents.count > 0) { - // This item has already been given extents via this iloc box. This is invalid. - avifDiagnosticsPrintf(diag, "Item ID [%u] contains duplicate sets of extents", itemID); - return AVIF_FALSE; - } - item->idatStored = idatStored; - uint16_t dataReferenceIndex; // unsigned int(16) data_ref rence_index; CHECK(avifROStreamReadU16(&s, &dataReferenceIndex)); // uint64_t baseOffset; // unsigned int(base_offset_size*8) base_offset;