Simplify avifDiagnosticsPrintf(), remove redundant NULL diag checks in avifROStream functions
diff --git a/src/diag.c b/src/diag.c
index 3b8c244..d9cb6ea 100644
--- a/src/diag.c
+++ b/src/diag.c
@@ -12,26 +12,20 @@
     memset(diag->error, 0, AVIF_DIAGNOSTICS_ERROR_BUFFER_SIZE);
 }
 
-static void avifDiagnosticsPrintv(avifDiagnostics * diag, const char * format, va_list args)
-{
-    if (*diag->error) {
-        // There is already a detailed error set.
-        return;
-    }
-
-    vsnprintf(diag->error, AVIF_DIAGNOSTICS_ERROR_BUFFER_SIZE, format, args);
-    diag->error[AVIF_DIAGNOSTICS_ERROR_BUFFER_SIZE - 1] = '\0';
-}
-
 void avifDiagnosticsPrintf(avifDiagnostics * diag, const char * format, ...)
 {
     if (!diag) {
         // It is possible this is NULL (e.g. calls to avifFileTypeIsCompatible())
         return;
     }
+    if (*diag->error) {
+        // There is already a detailed error set.
+        return;
+    }
 
     va_list args;
     va_start(args, format);
-    avifDiagnosticsPrintv(diag, format, args);
+    vsnprintf(diag->error, AVIF_DIAGNOSTICS_ERROR_BUFFER_SIZE, format, args);
+    diag->error[AVIF_DIAGNOSTICS_ERROR_BUFFER_SIZE - 1] = '\0';
     va_end(args);
 }
diff --git a/src/stream.c b/src/stream.c
index 9b02e96..eb0eabb 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -53,9 +53,7 @@
 avifBool avifROStreamSkip(avifROStream * stream, size_t byteCount)
 {
     if (!avifROStreamHasBytesLeft(stream, byteCount)) {
-        if (stream->diag) {
-            avifDiagnosticsPrintf(stream->diag, "%s: Failed to skip %zu bytes, truncated data?", stream->diagContext, byteCount);
-        }
+        avifDiagnosticsPrintf(stream->diag, "%s: Failed to skip %zu bytes, truncated data?", stream->diagContext, byteCount);
         return AVIF_FALSE;
     }
     stream->offset += byteCount;
@@ -65,9 +63,7 @@
 avifBool avifROStreamRead(avifROStream * stream, uint8_t * data, size_t size)
 {
     if (!avifROStreamHasBytesLeft(stream, size)) {
-        if (stream->diag) {
-            avifDiagnosticsPrintf(stream->diag, "%s: Failed to read %zu bytes, truncated data?", stream->diagContext, size);
-        }
+        avifDiagnosticsPrintf(stream->diag, "%s: Failed to read %zu bytes, truncated data?", stream->diagContext, size);
         return AVIF_FALSE;
     }
 
@@ -99,9 +95,7 @@
         *v = tmp;
     } else {
         // Unsupported factor
-        if (stream->diag) {
-            avifDiagnosticsPrintf(stream->diag, "%s: Failed to read UX8 value; Unsupported UX8 factor [%" PRIu64 "]", stream->diagContext, factor);
-        }
+        avifDiagnosticsPrintf(stream->diag, "%s: Failed to read UX8 value; Unsupported UX8 factor [%" PRIu64 "]", stream->diagContext, factor);
         return AVIF_FALSE;
     }
     return AVIF_TRUE;
@@ -141,9 +135,7 @@
         }
     }
     if (!foundNullTerminator) {
-        if (stream->diag) {
-            avifDiagnosticsPrintf(stream->diag, "%s: Failed to find a NULL terminator when reading a string", stream->diagContext);
-        }
+        avifDiagnosticsPrintf(stream->diag, "%s: Failed to find a NULL terminator when reading a string", stream->diagContext);
         return AVIF_FALSE;
     }
 
@@ -181,9 +173,7 @@
 
     size_t bytesRead = stream->offset - startOffset;
     if ((size < bytesRead) || ((size - bytesRead) > SIZE_MAX)) {
-        if (stream->diag) {
-            avifDiagnosticsPrintf(stream->diag, "%s: Header size overflow check failure", stream->diagContext);
-        }
+        avifDiagnosticsPrintf(stream->diag, "%s: Header size overflow check failure", stream->diagContext);
         return AVIF_FALSE;
     }
     header->size = (size_t)(size - bytesRead);
@@ -193,7 +183,11 @@
 avifBool avifROStreamReadBoxHeader(avifROStream * stream, avifBoxHeader * header)
 {
     CHECK(avifROStreamReadBoxHeaderPartial(stream, header));
-    return (header->size <= avifROStreamRemainingBytes(stream));
+    if (header->size > avifROStreamRemainingBytes(stream)) {
+        avifDiagnosticsPrintf(stream->diag, "%s: Child box too large, possibly truncated data", stream->diagContext);
+        return AVIF_FALSE;
+    }
+    return AVIF_TRUE;
 }
 
 avifBool avifROStreamReadVersionAndFlags(avifROStream * stream, uint8_t * version, uint32_t * flags)
@@ -214,9 +208,7 @@
     uint8_t version;
     CHECK(avifROStreamReadVersionAndFlags(stream, &version, NULL));
     if (version != enforcedVersion) {
-        if (stream->diag) {
-            avifDiagnosticsPrintf(stream->diag, "%s: Expecting box version %u, got version %u", stream->diagContext, enforcedVersion, version);
-        }
+        avifDiagnosticsPrintf(stream->diag, "%s: Expecting box version %u, got version %u", stream->diagContext, enforcedVersion, version);
         return AVIF_FALSE;
     }
     return AVIF_TRUE;