mirror of
https://github.com/the-tcpdump-group/tcpdump.git
synced 2024-11-23 18:14:29 +08:00
pass correct caplen to other functions as well
In ethertype_print(), isoclns_print() and snap_print() adjust the length arithmetics along the same lines as for ether_print() in the previous commit. Where done, the current pointer is not greater than snapend so that the difference (i.e. caplen) is never negative. This does not fix a reported issue but the problem was very likely to be there.
This commit is contained in:
parent
0db4dcafe5
commit
857ec6e800
@ -97,9 +97,9 @@ chdlc_print(netdissect_options *ndo, register const u_char *p, u_int length)
|
||||
if (*(p+1) == 0x81 ||
|
||||
*(p+1) == 0x82 ||
|
||||
*(p+1) == 0x83)
|
||||
isoclns_print(ndo, p + 1, length - 1, length - 1);
|
||||
isoclns_print(ndo, p + 1, length - 1, ndo->ndo_snapend - p - 1);
|
||||
else
|
||||
isoclns_print(ndo, p, length, length);
|
||||
isoclns_print(ndo, p, length, ndo->ndo_snapend - p);
|
||||
break;
|
||||
default:
|
||||
if (!ndo->ndo_eflag)
|
||||
|
@ -276,7 +276,7 @@ fr_print(netdissect_options *ndo,
|
||||
if (ethertype_print(ndo, extracted_ethertype,
|
||||
p+addr_len+ETHERTYPE_LEN,
|
||||
length-addr_len-ETHERTYPE_LEN,
|
||||
length-addr_len-ETHERTYPE_LEN,
|
||||
ndo->ndo_snapend-p-addr_len-ETHERTYPE_LEN,
|
||||
NULL, NULL) == 0)
|
||||
/* ether_type not known, probably it wasn't one */
|
||||
ND_PRINT((ndo, "UI %02x! ", p[addr_len]));
|
||||
@ -329,11 +329,11 @@ fr_print(netdissect_options *ndo,
|
||||
case NLPID_CLNP:
|
||||
case NLPID_ESIS:
|
||||
case NLPID_ISIS:
|
||||
isoclns_print(ndo, p - 1, length + 1, length + 1); /* OSI printers need the NLPID field */
|
||||
isoclns_print(ndo, p - 1, length + 1, ndo->ndo_snapend - p + 1); /* OSI printers need the NLPID field */
|
||||
break;
|
||||
|
||||
case NLPID_SNAP:
|
||||
if (snap_print(ndo, p, length, length, NULL, NULL, 0) == 0) {
|
||||
if (snap_print(ndo, p, length, ndo->ndo_snapend - p, NULL, NULL, 0) == 0) {
|
||||
/* ether_type not known, print raw packet */
|
||||
if (!ndo->ndo_eflag)
|
||||
fr_hdr_print(ndo, length + hdr_len, hdr_len,
|
||||
|
@ -223,7 +223,7 @@ geneve_print(netdissect_options *ndo, const u_char *bp, u_int len)
|
||||
else
|
||||
ND_PRINT((ndo, "\n\t"));
|
||||
|
||||
if (ethertype_print(ndo, prot, bp, len, len, NULL, NULL) == 0) {
|
||||
if (ethertype_print(ndo, prot, bp, len, ndo->ndo_snapend - bp, NULL, NULL) == 0) {
|
||||
if (prot == ETHERTYPE_TEB)
|
||||
ether_print(ndo, bp, len, ndo->ndo_snapend - bp, NULL, NULL);
|
||||
else
|
||||
|
@ -226,7 +226,7 @@ gre_print_0(netdissect_options *ndo, const u_char *bp, u_int length)
|
||||
atalk_print(ndo, bp, len);
|
||||
break;
|
||||
case ETHERTYPE_GRE_ISO:
|
||||
isoclns_print(ndo, bp, len, len);
|
||||
isoclns_print(ndo, bp, len, ndo->ndo_snapend - bp);
|
||||
break;
|
||||
case ETHERTYPE_TEB:
|
||||
ether_print(ndo, bp, len, ndo->ndo_snapend - bp, NULL, NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user