From 4b28eed0f09d55fa3fecc2d9a6235a8df4df27ef Mon Sep 17 00:00:00 2001 From: dmiller Date: Fri, 17 Jul 2026 21:56:25 +0000 Subject: [PATCH] Avoid strcat in init_npcap_dll_path() --- mswin32/winfix.cc | 14 +++++++------- nping/winfix.cc | 15 ++++++++------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/mswin32/winfix.cc b/mswin32/winfix.cc index 301503c4c..db211f82a 100644 --- a/mswin32/winfix.cc +++ b/mswin32/winfix.cc @@ -188,19 +188,19 @@ static void init_npcap_dll_path() { BOOL(WINAPI *SetDllDirectory)(LPCTSTR); char sysdir_name[512]; - int len; SetDllDirectory = (BOOL(WINAPI *)(LPCTSTR)) GetProcAddress(GetModuleHandle("kernel32.dll"), "SetDllDirectoryA"); if (SetDllDirectory == NULL) { - pfatal("Error in SetDllDirectory"); + pfatal("Error in GetProcAddress"); } else { - len = GetSystemDirectory(sysdir_name, 480); // be safe - if (!len) - pfatal("Error in GetSystemDirectory"); - strcat(sysdir_name, "\\Npcap"); + UINT remaining = sizeof(sysdir_name) - sizeof(NPCAP_SUBDIR); + UINT len = GetSystemDirectory(sysdir_name, remaining); + if (!len || len > remaining) + pfatal("Error in GetSystemDirectory (%d)", GetLastError()); + Strncpy(sysdir_name + len, "\\Npcap", sizeof(sysdir_name) - len); if (SetDllDirectory(sysdir_name) == 0) - pfatal("Error in SetDllDirectory(\"System32\\Npcap\")"); + pfatal("Error in SetDllDirectory(\"%s\")", sysdir_name); } } diff --git a/nping/winfix.cc b/nping/winfix.cc index 002132782..0920c8c60 100644 --- a/nping/winfix.cc +++ b/nping/winfix.cc @@ -186,19 +186,20 @@ static void init_npcap_dll_path() { BOOL(WINAPI *SetDllDirectory)(LPCTSTR); char sysdir_name[512]; - int len; SetDllDirectory = (BOOL(WINAPI *)(LPCTSTR)) GetProcAddress(GetModuleHandle("kernel32.dll"), "SetDllDirectoryA"); if (SetDllDirectory == NULL) { - pfatal("Error in SetDllDirectory"); + pfatal("Error in GetProcAddress"); } else { - len = GetSystemDirectory(sysdir_name, 480); // be safe - if (!len) - pfatal("Error in GetSystemDirectory (%d)", GetLastError()); - strcat(sysdir_name, "\\Npcap"); +#define NPCAP_SUBDIR "\\Npcap" + UINT remaining = sizeof(sysdir_name) - sizeof(NPCAP_SUBDIR); + UINT len = GetSystemDirectory(sysdir_name, remaining); + if (!len || len > remaining) + pfatal("Error in GetSystemDirectory"); + Strncpy(sysdir_name + len, "\\Npcap", sizeof(sysdir_name) - len); if (SetDllDirectory(sysdir_name) == 0) - pfatal("Error in SetDllDirectory(\"System32\\Npcap\")"); + pfatal("Error in SetDllDirectory(\"%s\")", sysdir_name); } }