Deal with a case where the returned packed was smaller than the

transmitted packet (because the remote host stripped off our icmp_data).

Submitted by:	 Maxim Konovalov <maxim@macomnet.ru>
This commit is contained in:
Matthew N. Dodd 2003-04-07 12:05:50 +00:00
parent 5c514aeee8
commit 47e9b3ea64

View File

@ -955,6 +955,7 @@ pr_pack(buf, cc, from, tv)
#endif
tp += phdr_len;
if (cc - ICMP_MINLEN - phdr_len >= sizeof(tv1)) {
/* Copy to avoid alignment problems: */
memcpy(&tv1, tp, sizeof(tv1));
tvsub(tv, &tv1);
@ -966,6 +967,8 @@ pr_pack(buf, cc, from, tv)
tmin = triptime;
if (triptime > tmax)
tmax = triptime;
} else
timing = 0;
}
seq = ntohs(icp->icmp_seq);
@ -1008,7 +1011,9 @@ pr_pack(buf, cc, from, tv)
/* check the data */
cp = (u_char*)&icp->icmp_data[phdr_len];
dp = &outpack[MINICMPLEN + phdr_len];
for (i = phdr_len; i < datalen; ++i, ++cp, ++dp) {
cc -= ICMP_MINLEN + phdr_len;
for (i = phdr_len; i < datalen && cc != 0;
++i, ++cp, ++dp, cc--) {
if (*cp != *dp) {
(void)printf("\nwrong data byte #%d should be 0x%x but was 0x%x",
i, *dp, *cp);