From 6889a2f6a5c6ef8f634826d073da839baf4acdfc Mon Sep 17 00:00:00 2001 From: nnposter Date: Thu, 1 Feb 2018 17:19:35 +0000 Subject: [PATCH] Resolves crash opportunities caused by unexpected libpcap version string format. Fixes #1112 --- CHANGELOG | 3 +++ nmap.cc | 9 ++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 6158d10bf..48c856791 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,8 @@ #Nmap Changelog ($Id$); -*-text-*- +o [GH#1112] Resolved crash opportunities caused by unexpected libpcap version + string format. [Gisle Vanem, nnposter] + o [NSE][GH#1083] New set of Telnet softmatches for version detection based on Telnet DO/DON'T options offered, covering a wide variety of devices and operating systems. [D Roberson] diff --git a/nmap.cc b/nmap.cc index 12503a90d..30495084d 100644 --- a/nmap.cc +++ b/nmap.cc @@ -2749,11 +2749,10 @@ static void display_nmap_version() { const char *pcap_version = pcap_lib_version(); #ifdef WIN32 - const char *pcap_num = strstr(pcap_version, "version "); - if (pcap_num) { - pcap_num += strlen("version "); - } - std::string pcap_num_str (pcap_num, strchr(pcap_num, ',') - pcap_num); + const char *pcap_num = strpbrk(pcap_version, "0123456789"); + if (pcap_num == NULL) + pcap_num = "(unknown)"; + std::string pcap_num_str (pcap_num, strcspn(pcap_num, ",")); #else std::string pcap_num_str = get_word_or_quote(pcap_version, 2); #endif