Parse 'auxl' and 'prem' within their own box size

A follow-up to PR https://github.com/AOMediaCodec/libavif/pull/3321.

Delete the comments that describe the bugs that were fixed.

Also move avifROStreamSkip(&s, irefHeader.size) and avifROStreamSkip(&s,
groupHeader.size) calls to the end of the loops, which is the common
convention in this file.
diff --git a/src/read.c b/src/read.c
index 480eac3..9709e1e 100644
--- a/src/read.c
+++ b/src/read.c
@@ -3348,12 +3348,7 @@
         avifBoxHeader irefHeader;
         AVIF_CHECKERR(avifROStreamReadBoxHeader(&s, &irefHeader), AVIF_RESULT_BMFF_PARSE_FAILED);
 
-        // Each SingleItemTypeReferenceBox must be parsed within the bounds of its own declared box
-        // size, like every other child box loop in this file. Reading the reference fields directly
-        // from the parent stream ignores irefHeader.size and lets a reference_count that disagrees
-        // with the box size read into the following bytes.
         BEGIN_STREAM(refStream, avifROStreamCurrent(&s), irefHeader.size, diag, "Box[iref] SingleItemTypeReference");
-        AVIF_CHECKERR(avifROStreamSkip(&s, irefHeader.size), AVIF_RESULT_BMFF_PARSE_FAILED);
 
         uint32_t fromID = 0;
         if (version == 0) {
@@ -3418,6 +3413,8 @@
                 item->premByID = toID;
             }
         }
+
+        AVIF_CHECKERR(avifROStreamSkip(&s, irefHeader.size), AVIF_RESULT_BMFF_PARSE_FAILED);
     }
 
     return AVIF_RESULT_OK;
@@ -3430,11 +3427,7 @@
     while (avifROStreamHasBytesLeft(&s, 1)) {
         avifBoxHeader groupHeader;
         AVIF_CHECKERR(avifROStreamReadBoxHeader(&s, &groupHeader), AVIF_RESULT_BMFF_PARSE_FAILED);
-        // Each EntityToGroupBox must be parsed within the bounds of its own declared box size, like
-        // every other child box loop in this file. Reading the group fields directly from the parent
-        // stream ignores groupHeader.size and lets num_entities_in_group read into the following bytes.
         BEGIN_STREAM(groupStream, avifROStreamCurrent(&s), groupHeader.size, diag, "Box[grpl] EntityToGroup");
-        AVIF_CHECKERR(avifROStreamSkip(&s, groupHeader.size), AVIF_RESULT_BMFF_PARSE_FAILED);
         // We don't check the flag or version as they depend on the grouping type (and for simplicity).
         // ISO/IEC 14496-12:2024 Section 8.15.3.2
         //   version shall be 0 unless defined otherwise for the grouping_type. Any values of flags such that
@@ -3455,6 +3448,8 @@
             AVIF_CHECKERR(entityId != NULL, AVIF_RESULT_OUT_OF_MEMORY);
             AVIF_CHECKERR(avifROStreamReadU32(&groupStream, entityId), AVIF_RESULT_BMFF_PARSE_FAILED);
         }
+
+        AVIF_CHECKERR(avifROStreamSkip(&s, groupHeader.size), AVIF_RESULT_BMFF_PARSE_FAILED);
     }
 
     return AVIF_RESULT_OK;
@@ -3867,11 +3862,13 @@
         AVIF_CHECK(avifROStreamReadBoxHeader(&s, &header));
 
         if (!memcmp(header.type, "auxl", 4)) {
+            AVIF_CHECK(header.size >= sizeof(uint32_t));
             uint32_t toID;
             AVIF_CHECK(avifROStreamReadU32(&s, &toID));                       // unsigned int(32) track_IDs[];
             AVIF_CHECK(avifROStreamSkip(&s, header.size - sizeof(uint32_t))); // just take the first one
             track->auxForID = toID;
         } else if (!memcmp(header.type, "prem", 4)) {
+            AVIF_CHECK(header.size >= sizeof(uint32_t));
             uint32_t byID;
             AVIF_CHECK(avifROStreamReadU32(&s, &byID));                       // unsigned int(32) track_IDs[];
             AVIF_CHECK(avifROStreamSkip(&s, header.size - sizeof(uint32_t))); // just take the first one