From: Wolfram Sang Date: Sat, 9 Jan 2016 16:40:10 +0000 (+0100) Subject: input: vcd: properly bail out on missing identifiers X-Git-Tag: libsigrok-0.4.0~22 X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=73f052d329574e6fa9fc8bebcc7682b120da5bab 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 --- 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];