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 <wsa@the-dreams.de>
This commit is contained in:
Wolfram Sang 2016-01-09 17:40:10 +01:00 committed by Uwe Hermann
parent e85e550d92
commit 73f052d329
1 changed files with 4 additions and 3 deletions

View File

@ -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];