BR 2782055: reject invalid tokens after ]

A bracketed memory reference should be followed by a comma or
the end of the line. Enforce this.
This commit is contained in:
Victor van den Elzen 2009-06-23 03:47:07 +02:00
parent 1957e65ca4
commit 02846d30c0

View file

@ -678,24 +678,32 @@ restart_parse:
return result; /* ignore this instruction */
}
}
bool recover = false;
if (mref && bracket) { /* find ] at the end */
if (i != ']') {
error(ERR_NONFATAL, "parser: expecting ]");
do { /* error recovery again */
i = stdscan(NULL, &tokval);
} while (i != 0 && i != ',');
} else /* we got the required ] */
recover = true;
} else { /* we got the required ] */
i = stdscan(NULL, &tokval);
if (i != 0 && i != ',') {
error(ERR_NONFATAL, "comma or end of line expected");
recover = true;
}
}
} else { /* immediate operand */
if (i != 0 && i != ',' && i != ':') {
error(ERR_NONFATAL, "comma or end of line expected");
do { /* error recovery */
i = stdscan(NULL, &tokval);
} while (i != 0 && i != ',');
error(ERR_NONFATAL, "comma, colon or end of line expected");
recover = true;
} else if (i == ':') {
result->oprs[operand].type |= COLON;
}
}
if (recover) {
do { /* error recovery */
i = stdscan(NULL, &tokval);
} while (i != 0 && i != ',');
}
/* now convert the exprs returned from evaluate() into operand
* descriptions... */