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