summaryrefslogtreecommitdiff
path: root/print-ppi.c
diff options
context:
space:
mode:
authorFrancois-Xavier Le Bail <fx.lebail@yahoo.com>2016-10-13 21:45:44 +0200
committerFrancois-Xavier Le Bail <fx.lebail@yahoo.com>2016-10-13 22:18:21 +0200
commit3454c77635d58f0526b125e94f02f279a42d5dd3 (patch)
tree9eec56fd8c9252c068558b68a96b2fc9ee716d2a /print-ppi.c
parent151c0cb295d37b5c1ce31db02c697fa9921a363b (diff)
downloadtcpdump-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.c6
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));