From ad13976cbabbe56c2759e93679921f6f2b0750d4 Mon Sep 17 00:00:00 2001
From: plvines <paul.vines@baesystems.com>
Date: Thu, 20 Feb 2020 09:04:14 -0500
Subject: [PATCH] Moved severity parser allocation to init_parser

---
 pdf.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/pdf.c b/pdf.c
index 76798d9..c1fbea1 100644
--- a/pdf.c
+++ b/pdf.c
@@ -246,6 +246,7 @@ act_nat(const HParseResult *p, void *u)
 #define act_xroff act_nat
 #define act_xrgen act_nat
 
+HParser *p_violsev;
 HParsedToken *
 act_viol(const HParseResult *p, void *viol)
 {
@@ -253,10 +254,6 @@ act_viol(const HParseResult *p, void *viol)
 	uint offset;
 	HParseResult *severity_parse;
 	viol = (uint8_t *) viol;
-	H_RULE(viol_preamble, SEQ(h_many(NOT_IN("=")), LIT("=")));
-	H_RULE(nat, h_action(h_many1(h_action(h_ch_range('0', '9'), act_digit, NULL)),
-			     act_nat, NULL));
-	H_RULE(p_violsev, SEQ(IGN(viol_preamble), nat));
 	severity_parse = h_parse(p_violsev, viol, strlen((char *)viol));
 	if (!severity_parse) {
 	  fprintf(stderr, "Severity for violaiton %s not assigned!\n", (char *)viol);
@@ -765,6 +762,13 @@ init_parser(struct Env *aux)
 	p_epsilon = epsilon;
 	p_return_0 = h_action(epsilon, act_return_uint, (void *)0);
 	p_return_1 = h_action(epsilon, act_return_uint, (void *)1);
+
+	/* Parsing of severity messages */
+	H_RULE(viol_preamble, SEQ(h_many(NOT_IN("=")), LIT("=")));
+	H_RULE(severity_num, h_action(h_many1(h_action(h_ch_range('0', '9'), act_digit, NULL)),
+			     act_nat, NULL));
+	H_RULE(violsev, SEQ(IGN(viol_preamble), severity_num));
+	p_violsev = violsev;
 }
 
 
-- 
GitLab