From de4b21757e47e1fd6524da4ed5f8996bbbec233e Mon Sep 17 00:00:00 2001
From: "Sven M. Hallberg" <pesco@khjk.org>
Date: Fri, 24 May 2013 22:38:14 +0200
Subject: [PATCH] make sure h_string_update copies its subtrees

---
 src/cfgrammar.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/cfgrammar.c b/src/cfgrammar.c
index d774dd09..e9c9d5dc 100644
--- a/src/cfgrammar.c
+++ b/src/cfgrammar.c
@@ -248,12 +248,18 @@ void h_stringmap_put_char(HCFStringMap *m, uint8_t c, void *v)
 }
 
 // helper for h_stringmap_update
-static void *combine_stringmap(void *v1, void *v2)
+static void *combine_stringmap(void *v1, const void *v2)
 {
-  h_stringmap_update((HCFStringMap *)v1, (HCFStringMap *)v2);
-  return v1;
+  HCFStringMap *m1 = v1;
+  const HCFStringMap *m2 = v2;
+  if(!m1)
+    m1 = h_stringmap_new(m2->arena);
+  h_stringmap_update(m1, m2);
+
+  return m1;
 }
 
+/* Note: Does *not* reuse submaps from n in building m. */
 void h_stringmap_update(HCFStringMap *m, const HCFStringMap *n)
 {
   if(n->epsilon_branch)
-- 
GitLab