Switch from sprintf(3) to snprintf(3) for cases involving strings that
come from the user, at least.  They already use assert(3) in the code
so I just followed along.

--- tree.c.orig	Tue Oct  8 22:39:24 2013
+++ tree.c	Fri Jan  2 14:31:43 2015
@@ -140,8 +140,10 @@ Node *makeAction(char *text)
 {
   Node *node= newNode(Action);
   char name[1024];
+  size_t n;
   assert(thisRule);
-  sprintf(name, "_%d_%s", ++actionCount, thisRule->rule.name);
+  n = snprintf(name,sizeof(name),"_%d_%s",++actionCount,thisRule->rule.name);
+  assert(n < sizeof(name));
   node->action.name= strdup(name);
   node->action.text= strdup(text);
   node->action.list= actions;
