Fix compatibility regression after r364117.

Properly handle the case, when some opcode keywords follow after
the `frag` opcode without additional options.

Reported by:	Evgeniy Khramtsov <evgeniy at khramtsov org>
This commit is contained in:
Andrey V. Elsukov 2020-09-11 10:07:09 +00:00
parent effd82ca70
commit b876085f55
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=365628

View File

@ -4560,17 +4560,24 @@ compile_rule(char *av[], uint32_t *rbuf, int *rbufsize, struct tidx *tstate)
fill_cmd(cmd, O_DIVERTED, 0, 2);
break;
case TOK_FRAG:
fill_flags_cmd(cmd, O_FRAG, f_ipoff, *av);
/*
* Compatibility: no argument after "frag"
* keyword equals to "frag offset".
*/
if (cmd->arg1 == 0)
cmd->arg1 = 0x1;
else
case TOK_FRAG: {
uint32_t set = 0, clear = 0;
if (*av != NULL && fill_flags(f_ipoff, *av, NULL,
&set, &clear) == 0)
av++;
else {
/*
* Compatibility: no argument after "frag"
* keyword equals to "frag offset".
*/
set = 0x01;
clear = 0;
}
fill_cmd(cmd, O_FRAG, 0,
(set & 0xff) | ( (clear & 0xff) << 8));
break;
}
case TOK_LAYER2:
fill_cmd(cmd, O_LAYER2, 0, 0);