From 6a466f7490df4dd63e86b118840fac4fb953dcc6 Mon Sep 17 00:00:00 2001 From: rlar Date: Wed, 6 Mar 2013 18:18:15 +0100 Subject: [PATCH] line_free_x(), prevent stack overflow due to non-trivial recursion --- src/frontend/inp.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/frontend/inp.c b/src/frontend/inp.c index eae698db2..33b85a812 100644 --- a/src/frontend/inp.c +++ b/src/frontend/inp.c @@ -274,14 +274,16 @@ inp_list(FILE *file, struct line *deck, struct line *extras, int type) void line_free_x(struct line *deck, bool recurse) { - if (!deck) - return; - tfree(deck->li_line); - tfree(deck->li_error); - if (recurse) - line_free(deck->li_next, TRUE); - line_free(deck->li_actual, TRUE); - tfree(deck); + while (deck) { + struct line *next_deck = deck->li_next; + line_free_x(deck->li_actual, TRUE); + tfree(deck->li_line); + tfree(deck->li_error); + tfree(deck); + if (!recurse) + return; + deck = next_deck; + } }