@@ -66,19 +66,15 @@ static void push_hll_info(struct cil_stack *stack, uint32_t hll_lineno, uint32_t
static void pop_hll_info(struct cil_stack *stack, uint32_t *hll_lineno, uint32_t *hll_expand)
{
struct cil_stack_item *curr = cil_stack_pop(stack);
- struct cil_stack_item *prev = cil_stack_peek(stack);
- struct hll_info *old;
+ struct hll_info *info;
- free(curr->data);
-
- if (!prev) {
- *hll_lineno = 0;
- *hll_expand = 0;
- } else {
- old = prev->data;
- *hll_lineno = old->hll_lineno;
- *hll_expand = old->hll_expand;
+ if (!curr) {
+ return;
}
+ info = curr->data;
+ *hll_expand = info->hll_expand;
+ *hll_lineno = info->hll_lineno;
+ free(curr->data);
}
static void create_node(struct cil_tree_node **node, struct cil_tree_node *current, uint32_t line, uint32_t hll_line, void *value)
@@ -128,6 +124,8 @@ static int add_hll_linemark(struct cil_tree_node **current, uint32_t *hll_lineno
pop_hll_info(stack, hll_lineno, hll_expand);
*current = (*current)->parent;
} else {
+ push_hll_info(stack, *hll_lineno, *hll_expand);
+
create_node(&node, *current, tok.line, *hll_lineno, NULL);
insert_node(node, *current);
*current = node;
@@ -158,8 +156,6 @@ static int add_hll_linemark(struct cil_tree_node **current, uint32_t *hll_lineno
*hll_lineno = val;
*hll_expand = (hll_type == CIL_KEY_HLL_LMX) ? 1 : 0;
- push_hll_info(stack, *hll_lineno, *hll_expand);
-
cil_lexer_next(&tok);
if (tok.type != SYMBOL && tok.type != QSTRING) {
cil_log(CIL_ERR, "Invalid line mark syntax\n");
CIL line mark rules are used to annotate the original line and file of a rule. It is mostly used for neverallow rules that have been converted to CIL. Pushing the current line mark state after processing a line mark section does not make sense since that information is never used. When the line mark section ends the information is just popped and discarded. It also makes pop_hll_info() more complicated than it needs to be. Push the line mark state first and simplfy pop_hll_info(). Signed-off-by: James Carter <jwcart2@gmail.com> --- libsepol/cil/src/cil_parser.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-)