Commit c4149b48 for libheif

commit c4149b48c8bbb69a4ac6f6ae95018657fd06f943
Author: Dirk Farin <dirk.farin@gmail.com>
Date:   Thu Aug 27 01:36:20 2026 +0200

    fix gcc-16 -Wmaybe-uninitialized in HeifContext constructor

    gcc-16 warns that &m_limits is passed to the TotalMemoryTracker
    constructor before m_limits has been initialized, since the security
    limits were only assigned in the constructor body. The tracker only
    uses the pointer as a map key, so this was harmless in practice, but
    initialize m_limits in the mem-initializer list so that it is fully
    constructed before its address is handed out.

diff --git a/libheif/context.cc b/libheif/context.cc
index 9c6d7883..6b5210e2 100644
--- a/libheif/context.cc
+++ b/libheif/context.cc
@@ -144,18 +144,28 @@ void heif_encoder::copy_parameters_from(const heif_encoder& src)
 }


-HeifContext::HeifContext()
-    : m_memory_tracker(&m_limits)
+// Selects the initial security limits for a new context. The environment variable
+// LIBHEIF_SECURITY_LIMITS=off disables all limits (for trusted input only).
+static const heif_security_limits& initial_security_limits()
 {
   const char* security_limits_variable = getenv("LIBHEIF_SECURITY_LIMITS");

   if (security_limits_variable && (strcmp(security_limits_variable, "off") == 0 ||
                                    strcmp(security_limits_variable, "OFF") == 0)) {
-    m_limits = disabled_security_limits;
+    return disabled_security_limits;
   }
   else {
-    m_limits = global_security_limits;
+    return global_security_limits;
   }
+}
+
+
+HeifContext::HeifContext()
+    : m_limits(initial_security_limits()),
+      m_memory_tracker(&m_limits)
+{
+  // m_limits must be fully initialized above before its address is passed to the memory tracker.
+  // (m_limits is declared before m_memory_tracker in context.h, so it is constructed first.)

   reset_to_empty_heif();
 }