From 4696f4a40bd38386dac5bc0f8331ca9c4e579bd6 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Tue, 20 Jun 2017 19:02:48 +0100 Subject: [PATCH] Coverity build fixes. Like every other toolchain I've tried, my Coverity scanning build has its share of random objections to parts of my Windows API type- checking system. I do wonder if that bright idea was worth the hassle - but it would probably cost all the annoyance all over again to back out now... --- windows/wincapi.c | 9 ++++++++- windows/winhsock.c | 5 +++-- windows/winmisc.c | 8 +++++--- windows/winnet.c | 10 ++++++++++ 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/windows/wincapi.c b/windows/wincapi.c index 2550b6de..2bd03470 100644 --- a/windows/wincapi.c +++ b/windows/wincapi.c @@ -19,7 +19,14 @@ int got_crypt(void) attempted = TRUE; crypt = load_system32_dll("crypt32.dll"); successful = crypt && - GET_WINDOWS_FUNCTION(crypt, CryptProtectMemory); +#ifdef COVERITY + /* The build toolchain I use with Coverity doesn't know + * about this function, so can't type-check it */ + GET_WINDOWS_FUNCTION_NO_TYPECHECK(crypt, CryptProtectMemory) +#else + GET_WINDOWS_FUNCTION(crypt, CryptProtectMemory) +#endif + ; } return successful; } diff --git a/windows/winhsock.c b/windows/winhsock.c index 799fd28d..7c8b0ba6 100644 --- a/windows/winhsock.c +++ b/windows/winhsock.c @@ -284,10 +284,11 @@ static char *sk_handle_peer_info(Socket s) if (!kernel32_module) { kernel32_module = load_system32_dll("kernel32.dll"); -#if (defined _MSC_VER && _MSC_VER < 1900) || defined __MINGW32__ +#if (defined _MSC_VER && _MSC_VER < 1900) || defined __MINGW32__ || defined COVERITY /* For older Visual Studio, and MinGW too (at least as of * Ubuntu 16.04), this function isn't available in the header - * files to type-check */ + * files to type-check. Ditto the toolchain I use for + * Coveritying the Windows code. */ GET_WINDOWS_FUNCTION_NO_TYPECHECK( kernel32_module, GetNamedPipeClientProcessId); #else diff --git a/windows/winmisc.c b/windows/winmisc.c index 85fa3c95..59d64312 100644 --- a/windows/winmisc.c +++ b/windows/winmisc.c @@ -177,9 +177,11 @@ void dll_hijacking_protection(void) if (!kernel32_module) { kernel32_module = load_system32_dll("kernel32.dll"); -#if defined _MSC_VER && _MSC_VER < 1900 - /* For older Visual Studio, this function isn't available in - * the header files to type-check */ +#if (defined _MSC_VER && _MSC_VER < 1900) || defined COVERITY + /* For older Visual Studio, and also for the system I + * currently use for Coveritying the Windows code, this + * function isn't available in the header files to + * type-check */ GET_WINDOWS_FUNCTION_NO_TYPECHECK( kernel32_module, SetDefaultDllDirectories); #else diff --git a/windows/winnet.c b/windows/winnet.c index e2edc87a..86f7735f 100644 --- a/windows/winnet.c +++ b/windows/winnet.c @@ -305,11 +305,21 @@ void sk_init(void) GET_WINDOWS_FUNCTION(winsock_module, WSAStartup); GET_WINDOWS_FUNCTION(winsock_module, WSACleanup); GET_WINDOWS_FUNCTION(winsock_module, closesocket); +#ifndef COVERITY GET_WINDOWS_FUNCTION(winsock_module, ntohl); GET_WINDOWS_FUNCTION(winsock_module, htonl); GET_WINDOWS_FUNCTION(winsock_module, htons); GET_WINDOWS_FUNCTION(winsock_module, ntohs); GET_WINDOWS_FUNCTION(winsock_module, gethostname); +#else + /* The toolchain I use for Windows Coverity builds doesn't know + * the type signatures of these */ + GET_WINDOWS_FUNCTION_NO_TYPECHECK(winsock_module, ntohl); + GET_WINDOWS_FUNCTION_NO_TYPECHECK(winsock_module, htonl); + GET_WINDOWS_FUNCTION_NO_TYPECHECK(winsock_module, htons); + GET_WINDOWS_FUNCTION_NO_TYPECHECK(winsock_module, ntohs); + GET_WINDOWS_FUNCTION_NO_TYPECHECK(winsock_module, gethostname); +#endif GET_WINDOWS_FUNCTION(winsock_module, gethostbyname); GET_WINDOWS_FUNCTION(winsock_module, getservbyname); GET_WINDOWS_FUNCTION(winsock_module, inet_addr);