diff options
author | Francois-Xavier Le Bail <fx.lebail@yahoo.com> | 2016-10-13 21:45:44 +0200 |
---|---|---|
committer | Francois-Xavier Le Bail <fx.lebail@yahoo.com> | 2016-10-13 22:18:21 +0200 |
commit | 3454c77635d58f0526b125e94f02f279a42d5dd3 (patch) | |
tree | 9eec56fd8c9252c068558b68a96b2fc9ee716d2a /print-ppi.c | |
parent | 151c0cb295d37b5c1ce31db02c697fa9921a363b (diff) | |
download | tcpdump-3454c77635d58f0526b125e94f02f279a42d5dd3.tar.gz |
PKTAP,PPI: Fix printing NULL string pointers
Printing NULL string pointers with printf format %s is an undefined
behaviour.
pcap_datalink_val_to_name() may return NULL on unknown DLT_ value.
tcpdump terminated with Segmentation Fault on such case on Solaris 10
SPARC with Solaris Studio 12.3 compiler.
Diffstat (limited to 'print-ppi.c')
-rw-r--r-- | print-ppi.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/print-ppi.c b/print-ppi.c index cb8f3b95..72cd1b86 100644 --- a/print-ppi.c +++ b/print-ppi.c @@ -30,18 +30,20 @@ ppi_header_print(netdissect_options *ndo, const u_char *bp, u_int length) const ppi_header_t *hdr; uint16_t len; uint32_t dlt; + const char *dltname; hdr = (const ppi_header_t *)bp; len = EXTRACT_LE_16BITS(&hdr->ppi_len); dlt = EXTRACT_LE_32BITS(&hdr->ppi_dlt); + dltname = pcap_datalink_val_to_name(dlt); if (!ndo->ndo_qflag) { ND_PRINT((ndo, "V.%d DLT %s (%d) len %d", hdr->ppi_ver, - pcap_datalink_val_to_name(dlt), dlt, + (dltname != NULL ? dltname : "UNKNOWN"), dlt, len)); } else { - ND_PRINT((ndo, "%s", pcap_datalink_val_to_name(dlt))); + ND_PRINT((ndo, "%s", (dltname != NULL ? dltname : "UNKNOWN"))); } ND_PRINT((ndo, ", length %u: ", length)); |