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();
}