Skip to content

Commit

Permalink
Clean up option-walking code.
Browse files Browse the repository at this point in the history
Loop as long as the remaining option list length is not zero, even if
that means we try to process the remaining options if the remaining
length is 1, so that if the option length is bogus, we'll report it.

Check for a valid ESIS_OPTION_ES_CONF_TIME length - it's supposed to be
2.
  • Loading branch information
guyharris committed Oct 14, 2011
1 parent 026147c commit f944e1e
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions print-isoclns.c
Original file line number Diff line number Diff line change
Expand Up @@ -1179,15 +1179,15 @@ esis_print(const u_int8_t *pptr, u_int length)
}

/* now walk the options */
while (li >= 2) {
while (li != 0) {
u_int op, opli;
const u_int8_t *tptr;

TCHECK2(*pptr, 2);
if (li < 2) {
printf(", bad opts/li");
return;
}
TCHECK2(*pptr, 2);
op = *pptr++;
opli = *pptr++;
li -= 2;
Expand All @@ -1206,8 +1206,11 @@ esis_print(const u_int8_t *pptr, u_int length)
switch (op) {

case ESIS_OPTION_ES_CONF_TIME:
TCHECK2(*pptr, 2);
printf("%us", EXTRACT_16BITS(tptr));
if (opli == 2) {
TCHECK2(*pptr, 2);
printf("%us", EXTRACT_16BITS(tptr));
} else
printf("(bad length)");
break;

case ESIS_OPTION_PROTOCOLS:
Expand Down

0 comments on commit f944e1e

Please sign in to comment.