checksum, fetch it by casting the pointer to "const u_int8_t *" rather
than "const char *" - casting it to "const char *" causes it to be
sign-extended, perhaps causing 16 1 bits to be added in at the top and,
at least on big-endian platforms (where "htons()" does nothing, meaning
it won't trim off the extra 16 bits) with signed "char"s (e.g., SPARC),
causing the checksum to be computed incorrectly and causing it to
incorrectly be reported as bad.
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.80 2000-11-17 19:08:16 itojun Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.81 2000-12-23 20:55:22 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
sum += *sp++;
if (tlen & 1) {
- sum += htons( (*(const char *)sp) << 8);
+ sum += htons( (*(const u_int8_t *)sp) << 8);
}
while (sum > 0xffff)
sum += *sp++;
if (tlen & 1)
- sum += htons((*(const char *)sp) << 8);
+ sum += htons((*(const u_int8_t *)sp) << 8);
while (sum > 0xffff)
sum = (sum & 0xffff) + (sum >> 16);
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.89 2000-11-17 19:08:16 itojun Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.90 2000-12-23 20:55:22 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
sum += *sp++;
if (tlen & 1) {
- sum += htons( (*(const char *)sp) << 8);
+ sum += htons( (*(const u_int8_t *)sp) << 8);
}
while (sum > 0xffff)
sum += *sp++;
if (tlen & 1)
- sum += htons((*(const char *)sp) << 8);
+ sum += htons((*(const u_int8_t *)sp) << 8);
while (sum > 0xffff)
sum = (sum & 0xffff) + (sum >> 16);