Change avifRWStreamFinishBox to return avifResult

Follow up on PR #3207. Allow error handling.
diff --git a/include/avif/internal.h b/include/avif/internal.h
index 4982eac..cdaa654 100644
--- a/include/avif/internal.h
+++ b/include/avif/internal.h
@@ -742,7 +742,7 @@
 avifResult avifRWStreamWriteFullBox(avifRWStream * stream, const char * type, size_t contentSize, int version, uint32_t flags, avifBoxMarker * marker);
 // marker is the offset of the size field in stream, returned by a previous
 // avifRWStreamWriteBox() or avifRWStreamWriteFullBox() call.
-void avifRWStreamFinishBox(avifRWStream * stream, avifBoxMarker marker);
+AVIF_NODISCARD avifResult avifRWStreamFinishBox(avifRWStream * stream, avifBoxMarker marker);
 avifResult avifRWStreamWriteU8(avifRWStream * stream, uint8_t v);
 avifResult avifRWStreamWriteU16(avifRWStream * stream, uint16_t v);
 avifResult avifRWStreamWriteU32(avifRWStream * stream, uint32_t v);
diff --git a/src/stream.c b/src/stream.c
index d1aa495..56965a8 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -426,7 +426,7 @@
     return avifRWStreamWriteFullBox(stream, type, contentSize, -1, 0, marker);
 }
 
-void avifRWStreamFinishBox(avifRWStream * stream, avifBoxMarker marker)
+avifResult avifRWStreamFinishBox(avifRWStream * stream, avifBoxMarker marker)
 {
     assert(stream->numUsedBitsInPartialByte == 0); // Byte alignment is required.
     size_t boxSize = stream->offset - marker;
@@ -434,12 +434,11 @@
     // 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();
-    }
+    AVIF_ASSERT_OR_RETURN(boxSize >= sizeof(uint32_t) + 4);
+    AVIF_CHECKERR(boxSize <= UINT32_MAX, AVIF_RESULT_INVALID_ARGUMENT);
     uint32_t noSize = avifHTONL((uint32_t)boxSize);
     memcpy(stream->raw->data + marker, &noSize, sizeof(uint32_t));
+    return AVIF_RESULT_OK;
 }
 
 avifResult avifRWStreamWriteU8(avifRWStream * stream, uint8_t v)
diff --git a/src/write.c b/src/write.c
index dd98adf..3b880a4 100644
--- a/src/write.c
+++ b/src/write.c
@@ -621,7 +621,7 @@
     AVIF_CHECKRES(avifRWStreamWriteU16(dedupStream, imageMetadata->matrixCoefficients)); // unsigned int(16) matrix_coefficients;
     AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, (imageMetadata->yuvRange == AVIF_RANGE_FULL) ? 1 : 0, /*bitCount=*/1)); // unsigned int(1) full_range_flag;
     AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, 0, /*bitCount=*/7)); // unsigned int(7) reserved = 0;
-    avifRWStreamFinishBox(dedupStream, colr);
+    AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, colr));
     if (dedup) {
         AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_FALSE));
     }
@@ -675,7 +675,7 @@
         AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "colr", AVIF_BOX_SIZE_TBD, &colr));
         AVIF_CHECKRES(avifRWStreamWriteChars(dedupStream, "prof", 4)); // unsigned int(32) colour_type;
         AVIF_CHECKRES(avifRWStreamWrite(dedupStream, imageMetadata->icc.data, imageMetadata->icc.size));
-        avifRWStreamFinishBox(dedupStream, colr);
+        AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, colr));
         if (dedup) {
             AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_FALSE));
         }
@@ -713,7 +713,7 @@
         avifBoxMarker clli;
         AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "clli", AVIF_BOX_SIZE_TBD, &clli));
         AVIF_CHECKRES(avifEncoderWriteContentLightLevelInformation(dedupStream, &imageMetadata->clli));
-        avifRWStreamFinishBox(dedupStream, clli);
+        AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, clli));
         if (dedup) {
             AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_FALSE));
         }
@@ -777,7 +777,7 @@
         AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "pasp", AVIF_BOX_SIZE_TBD, &pasp));
         AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->pasp.hSpacing)); // unsigned int(32) hSpacing;
         AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->pasp.vSpacing)); // unsigned int(32) vSpacing;
-        avifRWStreamFinishBox(dedupStream, pasp);
+        AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, pasp));
         if (dedup) {
             AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_FALSE));
         }
@@ -805,7 +805,7 @@
         AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.horizOffD)); // unsigned int(32) horizOffD;
         AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.vertOffN));  // unsigned int(32) vertOffN;
         AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.vertOffD));  // unsigned int(32) vertOffD;
-        avifRWStreamFinishBox(dedupStream, clap);
+        AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, clap));
         if (dedup) {
             AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_TRUE));
         }
@@ -818,7 +818,7 @@
         AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "irot", AVIF_BOX_SIZE_TBD, &irot));
         AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, 0, /*bitCount=*/6)); // unsigned int (6) reserved = 0;
         AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, imageMetadata->irot.angle & 0x3, /*bitCount=*/2)); // unsigned int (2) angle;
-        avifRWStreamFinishBox(dedupStream, irot);
+        AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, irot));
         if (dedup) {
             AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_TRUE));
         }
@@ -831,7 +831,7 @@
         AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "imir", AVIF_BOX_SIZE_TBD, &imir));
         AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, 0, /*bitCount=*/7)); // unsigned int(7) reserved = 0;
         AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, imageMetadata->imir.axis ? 1 : 0, /*bitCount=*/1)); // unsigned int(1) axis;
-        avifRWStreamFinishBox(dedupStream, imir);
+        AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, imir));
         if (dedup) {
             AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_TRUE));
         }
@@ -847,7 +847,7 @@
     AVIF_CHECKRES(avifRWStreamWriteChars(s, handlerType, 4)); // unsigned int(32) handler_type;
     AVIF_CHECKRES(avifRWStreamWriteZeros(s, 12));             // const unsigned int(32)[3] reserved = 0;
     AVIF_CHECKRES(avifRWStreamWriteChars(s, "", 1));          // string name; (writing null terminator)
-    avifRWStreamFinishBox(s, hdlr);
+    AVIF_CHECKRES(avifRWStreamFinishBox(s, hdlr));
     return AVIF_RESULT_OK;
 }
 
@@ -894,7 +894,7 @@
         AVIF_CHECKRES(avifRWStreamWriteU32(s, 0 /* set later */)); // unsigned int(offset_size*8) extent_offset;
         AVIF_CHECKRES(avifRWStreamWriteU32(s, (uint32_t)item->metadataPayload.size)); // unsigned int(length_size*8) extent_length;
     }
-    avifRWStreamFinishBox(s, iloc);
+    AVIF_CHECKRES(avifRWStreamFinishBox(s, iloc));
 
     avifBoxMarker iinf;
     AVIF_CHECKRES(avifRWStreamWriteFullBox(s, "iinf", AVIF_BOX_SIZE_TBD, 0, 0, &iinf));
@@ -915,11 +915,11 @@
         if (item->infeContentType && item->infeContentTypeSize) { // string content_type; (writing null terminator)
             AVIF_CHECKRES(avifRWStreamWriteChars(s, item->infeContentType, item->infeContentTypeSize));
         }
-        avifRWStreamFinishBox(s, infe);
+        AVIF_CHECKRES(avifRWStreamFinishBox(s, infe));
     }
-    avifRWStreamFinishBox(s, iinf);
+    AVIF_CHECKRES(avifRWStreamFinishBox(s, iinf));
 
-    avifRWStreamFinishBox(s, meta);
+    AVIF_CHECKRES(avifRWStreamFinishBox(s, meta));
     return AVIF_RESULT_OK;
 }
 
@@ -2327,7 +2327,7 @@
 
         AVIF_ASSERT_OR_RETURN(layerIndex <= AVIF_MAX_AV1_LAYER_COUNT);
     }
-    avifRWStreamFinishBox(s, mdat);
+    AVIF_CHECKRES(avifRWStreamFinishBox(s, mdat));
     return AVIF_RESULT_OK;
 }
 
@@ -2345,9 +2345,9 @@
         AVIF_CHECKRES(avifRWStreamWriteU32(s, (uint32_t)itemIDs->itemID[i])); // unsigned int(32) entity_id;
     }
 
-    avifRWStreamFinishBox(s, altr);
+    AVIF_CHECKRES(avifRWStreamFinishBox(s, altr));
 
-    avifRWStreamFinishBox(s, grpl);
+    AVIF_CHECKRES(avifRWStreamFinishBox(s, grpl));
 
     return AVIF_RESULT_OK;
 }
@@ -2498,7 +2498,7 @@
     AVIF_CHECKRES(avifRWStreamWriteChars(&s, "mif3", 4)); // unsigned int(32) major_brand;
     AVIF_CHECKRES(avifRWStreamWriteChars(&s, "avif", 4)); // unsigned int(32) minor_version;
                                                           // unsigned int(32) compatible_brands[];
-    avifRWStreamFinishBox(&s, ftyp);
+    AVIF_CHECKRES(avifRWStreamFinishBox(&s, ftyp));
 
     AVIF_CHECKRES(avifEncoderWriteMiniBox(encoder, &s));
 
@@ -2854,7 +2854,7 @@
                                       tmapIccSize + gainmapMetadataSize + (hasAlpha ? alphaData->size : 0) +
                                       (hasGainmap ? gainmapData->size : 0) + colorData->size + image->exif.size + image->xmp.size;
     AVIF_ASSERT_OR_RETURN(avifRWStreamOffset(s) == headerBytes + expectedChunkBytes);
-    avifRWStreamFinishBox(s, mini);
+    AVIF_CHECKRES(avifRWStreamFinishBox(s, mini));
     return AVIF_RESULT_OK;
 }
 #endif // AVIF_ENABLE_EXPERIMENTAL_MINI
@@ -2939,7 +2939,7 @@
         AVIF_CHECKRES(avifRWStreamWriteFullBox(&dedup->s, "ispe", AVIF_BOX_SIZE_TBD, 0, 0, &ispe));
         AVIF_CHECKRES(avifRWStreamWriteU32(&dedup->s, imageWidth));  // unsigned int(32) image_width;
         AVIF_CHECKRES(avifRWStreamWriteU32(&dedup->s, imageHeight)); // unsigned int(32) image_height;
-        avifRWStreamFinishBox(&dedup->s, ispe);
+        AVIF_CHECKRES(avifRWStreamFinishBox(&dedup->s, ispe));
         AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, s, &item->associations, /*essential=*/AVIF_FALSE));
 
         // pixi = pixel information (depth, channel count)
@@ -3013,7 +3013,7 @@
                 }
             }
 #endif // AVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI
-            avifRWStreamFinishBox(&dedup->s, pixi);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&dedup->s, pixi));
             AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, s, &item->associations, /*essential=*/AVIF_FALSE));
         }
 
@@ -3031,7 +3031,7 @@
             avifBoxMarker auxC;
             AVIF_CHECKRES(avifRWStreamWriteFullBox(&dedup->s, "auxC", AVIF_BOX_SIZE_TBD, 0, 0, &auxC));
             AVIF_CHECKRES(avifRWStreamWriteChars(&dedup->s, alphaURN, alphaURNSize)); //  string aux_type;
-            avifRWStreamFinishBox(&dedup->s, auxC);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&dedup->s, auxC));
             AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, s, &item->associations, /*essential=*/AVIF_FALSE));
         } else if (item->itemCategory == AVIF_ITEM_COLOR) {
             // Color specific properties
@@ -3077,7 +3077,7 @@
                     AVIF_CHECKRES(avifRWStreamWriteU16(&dedup->s, (uint16_t)layerSize[layer]));
                 }
             }
-            avifRWStreamFinishBox(&dedup->s, a1lx);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&dedup->s, a1lx));
             AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, s, &item->associations, /*essential=*/AVIF_FALSE));
 
             // We don't add an 'lsel' property since many decoders do not support it and will reject the image,
@@ -3094,7 +3094,7 @@
                 AVIF_CHECKRES(avifRWStreamWrite(&dedup->s, prop->usertype, 16));
             }
             AVIF_CHECKRES(avifRWStreamWrite(&dedup->s, prop->boxPayload.data, prop->boxPayload.size));
-            avifRWStreamFinishBox(&dedup->s, propMarker);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&dedup->s, propMarker));
             AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, s, &item->associations, /*essential=*/AVIF_FALSE));
         }
 
@@ -3315,7 +3315,7 @@
             break;
         }
     }
-    avifRWStreamFinishBox(&s, ftyp);
+    AVIF_CHECKRES(avifRWStreamFinishBox(&s, ftyp));
 
     // -----------------------------------------------------------------------
     // Start meta
@@ -3380,7 +3380,7 @@
         AVIF_CHECKRES(avifRWStreamWriteU32(&s, (uint32_t)contentSize)); // unsigned int(length_size*8) extent_length;
     }
 
-    avifRWStreamFinishBox(&s, iloc);
+    AVIF_CHECKRES(avifRWStreamFinishBox(&s, iloc));
 
     // -----------------------------------------------------------------------
     // Write iinf
@@ -3407,10 +3407,10 @@
             // utf8string item_uri_type;
             return AVIF_RESULT_NOT_IMPLEMENTED;
         }
-        avifRWStreamFinishBox(&s, infe);
+        AVIF_CHECKRES(avifRWStreamFinishBox(&s, infe));
     }
 
-    avifRWStreamFinishBox(&s, iinf);
+    AVIF_CHECKRES(avifRWStreamFinishBox(&s, iinf));
 
     // -----------------------------------------------------------------------
     // Write iref boxes
@@ -3442,7 +3442,7 @@
                     AVIF_CHECKRES(avifRWStreamWriteU16(&s, dimgItem->id)); // unsigned int(16) to_item_ID;
                 }
             }
-            avifRWStreamFinishBox(&s, refType);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, refType));
         }
 
         if (item->irefToID != 0) {
@@ -3454,11 +3454,11 @@
             AVIF_CHECKRES(avifRWStreamWriteU16(&s, item->id));       // unsigned int(16) from_item_ID;
             AVIF_CHECKRES(avifRWStreamWriteU16(&s, 1));              // unsigned int(16) reference_count;
             AVIF_CHECKRES(avifRWStreamWriteU16(&s, item->irefToID)); // unsigned int(16) to_item_ID;
-            avifRWStreamFinishBox(&s, refType);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, refType));
         }
     }
     if (iref) {
-        avifRWStreamFinishBox(&s, iref);
+        AVIF_CHECKRES(avifRWStreamFinishBox(&s, iref));
     }
 
     // -----------------------------------------------------------------------
@@ -3475,9 +3475,9 @@
     altImageMetadata = encoder->data->altImageMetadata;
     avifResult result = avifRWStreamWriteProperties(dedup, &s, encoder, imageMetadata, altImageMetadata);
     avifItemPropertyDedupDestroy(dedup);
-    AVIF_CHECKRES(result);
-    avifRWStreamFinishBox(&s, ipco);
     dedup = NULL;
+    AVIF_CHECKRES(result);
+    AVIF_CHECKRES(avifRWStreamFinishBox(&s, ipco));
 
     avifBoxMarker ipma;
     AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "ipma", AVIF_BOX_SIZE_TBD, 0, 0, &ipma));
@@ -3509,9 +3509,9 @@
             }
         }
     }
-    avifRWStreamFinishBox(&s, ipma);
+    AVIF_CHECKRES(avifRWStreamFinishBox(&s, ipma));
 
-    avifRWStreamFinishBox(&s, iprp);
+    AVIF_CHECKRES(avifRWStreamFinishBox(&s, iprp));
 
     // -----------------------------------------------------------------------
     // Write grpl/altr box
@@ -3531,7 +3531,7 @@
     // -----------------------------------------------------------------------
     // Finish meta box
 
-    avifRWStreamFinishBox(&s, meta);
+    AVIF_CHECKRES(avifRWStreamFinishBox(&s, meta));
 
     // -----------------------------------------------------------------------
     // Write tracks (if an image sequence)
@@ -3591,7 +3591,7 @@
         AVIF_CHECKRES(avifRWStreamWrite(&s, unityMatrix, sizeof(unityMatrix)));
         AVIF_CHECKRES(avifRWStreamWriteZeros(&s, 24));                       // bit(32)[6] pre_defined = 0;
         AVIF_CHECKRES(avifRWStreamWriteU32(&s, encoder->data->items.count)); // unsigned int(32) next_track_ID;
-        avifRWStreamFinishBox(&s, mvhd);
+        AVIF_CHECKRES(avifRWStreamFinishBox(&s, mvhd));
 
         // -------------------------------------------------------------------
         // Write tracks
@@ -3628,7 +3628,7 @@
             AVIF_CHECKRES(avifRWStreamWrite(&s, unityMatrix, sizeof(unityMatrix))); // template int(32)[9] matrix= // { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 };
             AVIF_CHECKRES(avifRWStreamWriteU32(&s, imageMetadata->width << 16));  // unsigned int(32) width;
             AVIF_CHECKRES(avifRWStreamWriteU32(&s, imageMetadata->height << 16)); // unsigned int(32) height;
-            avifRWStreamFinishBox(&s, tkhd);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, tkhd));
 
             if (item->irefToID != 0) {
                 avifBoxMarker tref;
@@ -3636,8 +3636,8 @@
                 avifBoxMarker refType;
                 AVIF_CHECKRES(avifRWStreamWriteBox(&s, item->irefType, AVIF_BOX_SIZE_TBD, &refType));
                 AVIF_CHECKRES(avifRWStreamWriteU32(&s, (uint32_t)item->irefToID));
-                avifRWStreamFinishBox(&s, refType);
-                avifRWStreamFinishBox(&s, tref);
+                AVIF_CHECKRES(avifRWStreamFinishBox(&s, refType));
+                AVIF_CHECKRES(avifRWStreamFinishBox(&s, tref));
             }
 
             avifBoxMarker edts;
@@ -3650,8 +3650,8 @@
             AVIF_CHECKRES(avifRWStreamWriteU64(&s, 0));                          // int(64) media_time;
             AVIF_CHECKRES(avifRWStreamWriteU16(&s, 1));                          // int(16) media_rate_integer;
             AVIF_CHECKRES(avifRWStreamWriteU16(&s, 0));                          // int(16) media_rate_fraction = 0;
-            avifRWStreamFinishBox(&s, elst);
-            avifRWStreamFinishBox(&s, edts);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, elst));
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, edts));
 
             if (item->itemCategory != AVIF_ITEM_ALPHA) {
                 AVIF_CHECKRES(avifEncoderWriteTrackMetaBox(encoder, &s));
@@ -3668,7 +3668,7 @@
             AVIF_CHECKRES(avifRWStreamWriteU64(&s, framesDurationInTimescales));   // unsigned int(64) duration;
             AVIF_CHECKRES(avifRWStreamWriteU16(&s, 21956)); // bit(1) pad = 0; unsigned int(5)[3] language; ("und")
             AVIF_CHECKRES(avifRWStreamWriteU16(&s, 0));     // unsigned int(16) pre_defined = 0;
-            avifRWStreamFinishBox(&s, mdhd);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, mdhd));
 
             AVIF_CHECKRES(avifRWStreamWriteHandlerBox(&s, (item->itemCategory == AVIF_ITEM_ALPHA) ? "auxv" : "pict"));
 
@@ -3679,7 +3679,7 @@
             AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "vmhd", AVIF_BOX_SIZE_TBD, 0, 1, &vmhd));
             AVIF_CHECKRES(avifRWStreamWriteU16(&s, 0)); // template unsigned int(16) graphicsmode = 0; (copy over the existing image)
             AVIF_CHECKRES(avifRWStreamWriteZeros(&s, 6)); // template unsigned int(16)[3] opcolor = {0, 0, 0};
-            avifRWStreamFinishBox(&s, vmhd);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, vmhd));
 
             avifBoxMarker dinf;
             AVIF_CHECKRES(avifRWStreamWriteBox(&s, "dinf", AVIF_BOX_SIZE_TBD, &dinf));
@@ -3687,8 +3687,8 @@
             AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "dref", AVIF_BOX_SIZE_TBD, 0, 0, &dref));
             AVIF_CHECKRES(avifRWStreamWriteU32(&s, 1)); // unsigned int(32) entry_count;
             AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "url ", /*contentSize=*/0, 0, 1, /*marker=*/NULL)); // flags:1 means data is in this file
-            avifRWStreamFinishBox(&s, dref);
-            avifRWStreamFinishBox(&s, dinf);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, dref));
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, dinf));
 
             // The boxes within the "stbl" box are ordered using the following recommendation in ISO/IEC 14496-12, Section 6.2.3:
             // 4) It is recommended that the boxes within the Sample Table Box be in the following order: Sample Description
@@ -3731,17 +3731,17 @@
             AVIF_CHECKRES(avifRWStreamWriteBits(&s, 1, /*bitCount=*/1));  // unsigned int(1) intra_pred_used;
             AVIF_CHECKRES(avifRWStreamWriteBits(&s, 15, /*bitCount=*/4)); // unsigned int(4) max_ref_per_pic;
             AVIF_CHECKRES(avifRWStreamWriteBits(&s, 0, /*bitCount=*/26)); // unsigned int(26) reserved;
-            avifRWStreamFinishBox(&s, ccst);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, ccst));
 
             if (item->itemCategory == AVIF_ITEM_ALPHA) {
                 avifBoxMarker auxi;
                 AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "auxi", AVIF_BOX_SIZE_TBD, 0, 0, &auxi));
                 AVIF_CHECKRES(avifRWStreamWriteChars(&s, alphaURN, alphaURNSize)); //  string aux_track_type;
-                avifRWStreamFinishBox(&s, auxi);
+                AVIF_CHECKRES(avifRWStreamFinishBox(&s, auxi));
             }
 
-            avifRWStreamFinishBox(&s, imageItem);
-            avifRWStreamFinishBox(&s, stsd);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, imageItem));
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, stsd));
 
             avifBoxMarker stts;
             AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "stts", AVIF_BOX_SIZE_TBD, 0, 0, &stts));
@@ -3766,7 +3766,7 @@
             avifRWStreamSetOffset(&s, sttsEntryCountOffset);
             AVIF_CHECKRES(avifRWStreamWriteU32(&s, sttsEntryCount));
             avifRWStreamSetOffset(&s, prevOffset);
-            avifRWStreamFinishBox(&s, stts);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, stts));
 
             avifBoxMarker stsc;
             AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "stsc", AVIF_BOX_SIZE_TBD, 0, 0, &stsc));
@@ -3774,7 +3774,7 @@
             AVIF_CHECKRES(avifRWStreamWriteU32(&s, 1));                                 // unsigned int(32) first_chunk;
             AVIF_CHECKRES(avifRWStreamWriteU32(&s, item->encodeOutput->samples.count)); // unsigned int(32) samples_per_chunk;
             AVIF_CHECKRES(avifRWStreamWriteU32(&s, 1)); // unsigned int(32) sample_description_index;
-            avifRWStreamFinishBox(&s, stsc);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, stsc));
 
             avifBoxMarker stsz;
             AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "stsz", AVIF_BOX_SIZE_TBD, 0, 0, &stsz));
@@ -3784,14 +3784,14 @@
                 avifEncodeSample * sample = &item->encodeOutput->samples.sample[sampleIndex];
                 AVIF_CHECKRES(avifRWStreamWriteU32(&s, (uint32_t)sample->data.size)); // unsigned int(32) entry_size;
             }
-            avifRWStreamFinishBox(&s, stsz);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, stsz));
 
             avifBoxMarker stco;
             AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "stco", AVIF_BOX_SIZE_TBD, 0, 0, &stco));
             AVIF_CHECKRES(avifRWStreamWriteU32(&s, 1));           // unsigned int(32) entry_count;
             AVIF_CHECKRES(avifEncoderItemAddMdatFixup(item, &s)); //
             AVIF_CHECKRES(avifRWStreamWriteU32(&s, 1));           // unsigned int(32) chunk_offset; (set later)
-            avifRWStreamFinishBox(&s, stco);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, stco));
 
             avifBool hasNonSyncSample = AVIF_FALSE;
             for (uint32_t sampleIndex = 0; sampleIndex < item->encodeOutput->samples.count; ++sampleIndex) {
@@ -3812,20 +3812,20 @@
                         AVIF_CHECKRES(avifRWStreamWriteU32(&s, sampleIndex + 1)); // unsigned int(32) sample_number;
                     }
                 }
-                avifRWStreamFinishBox(&s, stss);
+                AVIF_CHECKRES(avifRWStreamFinishBox(&s, stss));
             }
 
-            avifRWStreamFinishBox(&s, stbl);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, stbl));
 
-            avifRWStreamFinishBox(&s, minf);
-            avifRWStreamFinishBox(&s, mdia);
-            avifRWStreamFinishBox(&s, trak);
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, minf));
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, mdia));
+            AVIF_CHECKRES(avifRWStreamFinishBox(&s, trak));
         }
 
         // -------------------------------------------------------------------
         // Finish moov box
 
-        avifRWStreamFinishBox(&s, moov);
+        AVIF_CHECKRES(avifRWStreamFinishBox(&s, moov));
     }
 
     // -----------------------------------------------------------------------
@@ -3905,6 +3905,6 @@
     avifBoxMarker configBox;
     AVIF_CHECKRES(avifRWStreamWriteBox(s, configPropName, AVIF_BOX_SIZE_TBD, &configBox));
     AVIF_CHECKRES(writeCodecConfig(s, cfg));
-    avifRWStreamFinishBox(s, configBox);
+    AVIF_CHECKRES(avifRWStreamFinishBox(s, configBox));
     return AVIF_RESULT_OK;
 }
diff --git a/tests/gtest/avifstreamtest.cc b/tests/gtest/avifstreamtest.cc
index 199b8be..b696312 100644
--- a/tests/gtest/avifstreamtest.cc
+++ b/tests/gtest/avifstreamtest.cc
@@ -52,9 +52,10 @@
   const uint16_t rw_someu16 = 0xAABB;
   EXPECT_EQ(avifRWStreamWriteU16(&rw_stream, rw_someu16), AVIF_RESULT_OK);
 
-  avifRWStreamFinishBox(&rw_stream, rw_full_box_marker);
+  ASSERT_EQ(avifRWStreamFinishBox(&rw_stream, rw_full_box_marker),
+            AVIF_RESULT_OK);
 
-  avifRWStreamFinishBox(&rw_stream, rw_box_marker);
+  ASSERT_EQ(avifRWStreamFinishBox(&rw_stream, rw_box_marker), AVIF_RESULT_OK);
 
   const uint32_t rw_someu32 = 0xAABBCCDD;
   EXPECT_EQ(avifRWStreamWriteU32(&rw_stream, rw_someu32), AVIF_RESULT_OK);