From 2cec7342d9d8a2e66fbec8e442a09cf6252c4b07 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Mon, 26 Sep 2022 17:16:22 +0200
Subject: [PATCH] Fix bug in ModelTree::writeParamsDerivativesFileHelper()

Elements of params_derivatives could be accessed without them being defined,
thus causing illegal memory read.

Ensure that these elements always exist.

(partially cherry picked from commit 64157d908393a42355e9e67507924106d45aaea5)
---
 src/ModelTree.cc | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/ModelTree.cc b/src/ModelTree.cc
index 5d89e7b2..952d0c05 100644
--- a/src/ModelTree.cc
+++ b/src/ModelTree.cc
@@ -124,6 +124,9 @@ ModelTree::ModelTree(SymbolTable &symbol_table_arg,
   NNZDerivatives(4, 0),
   temporary_terms_derivatives(4)
 {
+  // Ensure that elements accessed by {Static,Dynamic}Model:write{Json,}ParamsDerivativesFile() exist
+  for (const auto &ord : {pair{0, 1}, pair{1, 1}, pair{0, 2}, pair{1, 2}, pair{2, 1}, pair{3, 1}})
+    params_derivatives.emplace(ord, decltype(params_derivatives)::mapped_type{});
 }
 
 ModelTree::ModelTree(const ModelTree &m) :
-- 
GitLab