From 73f052d329574e6fa9fc8bebcc7682b120da5bab Mon Sep 17 00:00:00 2001 From: Wolfram Sang Date: Sat, 9 Jan 2016 17:40:10 +0100 Subject: [PATCH] input: vcd: properly bail out on missing identifiers If we hit the missing identifier case, then we reached the end of the token list. So, we should break out of the loop, and not continue. Otherwise we will go past the end of the array as this minimal testcase shows: $timescale 1 ns $end $var wire 1 n0 addr_0 $end $enddefinitions $end 1 gives: $ ./sigrok-cli -I vcd -i no_mod.vcd -O vcd -o /tmp/o.vcd Segmentation fault Signed-off-by: Wolfram Sang --- src/input/vcd.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/input/vcd.c b/src/input/vcd.c index e4a4e727..91c22fca 100644 --- a/src/input/vcd.c +++ b/src/input/vcd.c @@ -418,9 +418,10 @@ static void parse_contents(const struct sr_input *in, char *data) * there was whitespace after the bit, the next token. */ if (tokens[i][1] == '\0') { - if (!tokens[++i]) - /* Missing identifier */ - continue; + if (!tokens[++i]) { + sr_dbg("Identifier missing!"); + break; + } } else { for (j = 1; tokens[i][j]; j++) tokens[i][j - 1] = tokens[i][j];