correct = correct_str(&corr, parser->correct_variables[i], parser_tokval(parser));
if (strcmp(correct, parser_tokval(parser))) {
break;
- } else if (correct) {
+ } else {
mem_d(correct);
correct = NULL;
}
}
unary = (ast_unary*)cond;
- while (ast_istype(cond, ast_unary) && unary->op == INSTR_NOT_F)
+ /* ast_istype dereferences cond, should test here for safety */
+ while (cond && ast_istype(cond, ast_unary) && unary->op == INSTR_NOT_F)
{
cond = unary->operand;
unary->operand = NULL;
if (!(expression = parse_expression(parser, false, true)) ||
!(*out = parse_goto_computed(parser, &expression))) {
parseerror(parser, "invalid goto expression");
- ast_unref(expression);
+ if(expression)
+ ast_unref(expression);
return false;
}