From b4e28ac021d50eaa20a8e2ccf01d557e85bb52ab Mon Sep 17 00:00:00 2001
From: "Meredith L. Patterson" <mlp@thesmartpolitenerd.com>
Date: Tue, 19 Nov 2013 19:05:48 -0600
Subject: [PATCH] Fixed a potential segfault; hand-initialized HParsers in
 h_choice and h_sequence need PB_MIN set.

Conflicts:
	src/bindings/python/SConscript
	src/bindings/python/hammer_tests.py
---
 src/parsers/choice.c   |  4 +++-
 src/parsers/sequence.c | 10 ++++++----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/parsers/choice.c b/src/parsers/choice.c
index 6db1378..bb55fa8 100644
--- a/src/parsers/choice.c
+++ b/src/parsers/choice.c
@@ -143,6 +143,8 @@ HParser* h_choice__ma(HAllocator* mm__, void *args[]) {
 
   s->len = len;
   HParser *ret = h_new(HParser, 1);
-  ret->vtable = &choice_vt; ret->env = (void*)s;
+  ret->vtable = &choice_vt;
+  ret->env = (void*)s;
+  ret->backend = PB_MIN;
   return ret;
 }
diff --git a/src/parsers/sequence.c b/src/parsers/sequence.c
index eff4610..bdea8c0 100644
--- a/src/parsers/sequence.c
+++ b/src/parsers/sequence.c
@@ -145,20 +145,22 @@ HParser* h_sequence__a(void *args[]) {
 HParser* h_sequence__ma(HAllocator* mm__, void *args[]) {
   size_t len = -1; // because do...while
   const HParser *arg;
-  
+
   do {
     arg=((HParser **)args)[++len];
   } while(arg);
-  
+
   HSequence *s = h_new(HSequence, 1);
   s->p_array = h_new(HParser *, len);
 
   for (size_t i = 0; i < len; i++) {
     s->p_array[i] = ((HParser **)args)[i];
   }
-  
+
   s->len = len;
   HParser *ret = h_new(HParser, 1);
-  ret->vtable = &sequence_vt; ret->env = (void*)s;
+  ret->vtable = &sequence_vt;
+  ret->env = (void*)s;
+  ret->backend = PB_MIN;
   return ret;
 }
-- 
GitLab