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:
parent
1957e65ca4
commit
02846d30c0
1 changed files with 16 additions and 8 deletions
24
parser.c
24
parser.c
|
@ -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... */
|
||||
|
|
Loading…
Reference in a new issue