X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppdump%2Fpppdump.c;h=b85a86271edacafcbae3f7329bce4e08bf5b0b94;hb=a75fb7b198eed50d769c80c36629f38346882cbf;hp=130300a17d348046dbc4a81100f8fbfcf3d9f0a5;hpb=2ae35d6c067d198c5e0bb4ac2d480271f3de3540;p=ppp.git diff --git a/pppdump/pppdump.c b/pppdump/pppdump.c index 130300a..b85a862 100644 --- a/pppdump/pppdump.c +++ b/pppdump/pppdump.c @@ -38,7 +38,7 @@ #include #include #include -#include "ppp_defs.h" + #include "ppp-comp.h" int hexmode; @@ -233,6 +233,7 @@ static u_short fcstab[256] = { 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; +#define PPP_FCS(fcs, c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff]) struct pkt { int cnt; @@ -296,6 +297,10 @@ dumpppp(f) printf("%s aborted packet:\n ", dir); q = " "; } + if (pkt->cnt >= sizeof(pkt->buf)) { + printf("%s over-long packet truncated:\n ", dir); + q = " "; + } nb = pkt->cnt; p = pkt->buf; pkt->cnt = 0; @@ -399,7 +404,8 @@ dumpppp(f) c ^= 0x20; pkt->esc = 0; } - pkt->buf[pkt->cnt++] = c; + if (pkt->cnt < sizeof(pkt->buf)) + pkt->buf[pkt->cnt++] = c; break; } }