From 30b9391461d2beb6b035949090c8381a5043510c Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 29 Jan 2018 14:08:56 +0100 Subject: [PATCH] windows library: Enhance Event function configuration, add tests (#1064) --- cfg/windows.cfg | 12 ++++++-- test/cfg/windows.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 3 deletions(-) diff --git a/cfg/windows.cfg b/cfg/windows.cfg index 0559a3ab3..a9d5d3901 100644 --- a/cfg/windows.cfg +++ b/cfg/windows.cfg @@ -960,7 +960,11 @@ OpenFileMapping CreateNamedPipe CreateEvent + CreateEventA + CreateEventW CreateEventEx + CreateEventExA + CreateEventExW CreateMutex CreateMutexA CreateMutexW @@ -976,6 +980,8 @@ CreateTimerQueue CreateWaitableTimer OpenEvent + OpenEventA + OpenEventW OpenMutex OpenMutexA OpenMutexW @@ -3752,7 +3758,7 @@ HFONT CreateFont( _In_ BOOL bManualReset, _In_ BOOL bInitialState, _In_opt_ LPCTSTR lpName);--> - + false @@ -3775,7 +3781,7 @@ HFONT CreateFont( _In_opt_ LPCTSTR lpName, _In_ DWORD dwFlags, _In_ DWORD dwDesiredAccess);--> - + false @@ -3799,7 +3805,7 @@ HFONT CreateFont( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ LPCTSTR lpName);--> - + false diff --git a/test/cfg/windows.cpp b/test/cfg/windows.cpp index bb21afbf6..e5b028c65 100644 --- a/test/cfg/windows.cpp +++ b/test/cfg/windows.cpp @@ -59,6 +59,25 @@ void validCode() FreeLibrary(hModule); hModule = GetModuleHandle(NULL); FreeLibrary(hModule); + + // Valid Event usage, no leaks, valid arguments + HANDLE event; + event = CreateEvent(NULL, FALSE, FALSE, NULL); + if (NULL != event) { + SetEvent(event); + CloseHandle(event); + } + event = OpenEvent(EVENT_ALL_ACCESS, FALSE, L"testevent"); + if (NULL != event) { + PulseEvent(event); + SetEvent(event); + CloseHandle(event); + } + event = CreateEventEx(NULL, L"testevent3", CREATE_EVENT_INITIAL_SET, EVENT_MODIFY_STATE); + if (NULL != event) { + ResetEvent(event); + CloseHandle(event); + } } void bufferAccessOutOfBounds() @@ -102,6 +121,17 @@ void nullPointer() HMODULE * phModule = NULL; // cppcheck-suppress nullPointer GetModuleHandleEx(0, NULL, phModule); + + // cppcheck-suppress leakReturnValNotUsed + // cppcheck-suppress nullPointer + OpenEvent(EVENT_ALL_ACCESS, FALSE, NULL); + HANDLE hEvent = NULL; + // cppcheck-suppress nullPointer + PulseEvent(hEvent); + // cppcheck-suppress nullPointer + ResetEvent(hEvent); + // cppcheck-suppress nullPointer + SetEvent(hEvent); } void resourceLeak_CreateSemaphoreA() @@ -162,6 +192,30 @@ void resourceLeak_LoadLibrary() // cppcheck-suppress resourceLeak } +void resourceLeak_CreateEvent() +{ + HANDLE hEvent; + hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); + SetEvent(hEvent); + // cppcheck-suppress resourceLeak +} + +void resourceLeak_CreateEventExA() +{ + HANDLE hEvent; + // cppcheck-suppress unreadVariable + hEvent = CreateEventExA(NULL, "test", CREATE_EVENT_INITIAL_SET, EVENT_MODIFY_STATE); + // cppcheck-suppress resourceLeak +} + +void resourceLeak_OpenEventW() +{ + HANDLE hEvent; + // cppcheck-suppress unreadVariable + hEvent = OpenEventW(EVENT_ALL_ACCESS, TRUE, L"testevent"); + // cppcheck-suppress resourceLeak +} + void ignoredReturnValue() { // cppcheck-suppress leakReturnValNotUsed @@ -187,6 +241,13 @@ void ignoredReturnValue() // cppcheck-suppress ignoredReturnValue GetProcAddress(hInstLib, "name"); FreeLibrary(hInstLib); + + // cppcheck-suppress leakReturnValNotUsed + CreateEvent(NULL, FALSE, FALSE, NULL); + // cppcheck-suppress leakReturnValNotUsed + OpenEvent(EVENT_ALL_ACCESS, FALSE, L"testevent"); + // cppcheck-suppress leakReturnValNotUsed + CreateEventEx(NULL, L"test", CREATE_EVENT_INITIAL_SET, EVENT_MODIFY_STATE); } void invalidFunctionArg() @@ -243,6 +304,16 @@ void uninitvar() ReleaseMutex(hMutex); // cppcheck-suppress uninitvar CloseHandle(hMutex); + + HANDLE hEvent; + // cppcheck-suppress uninitvar + PulseEvent(hEvent); + // cppcheck-suppress uninitvar + ResetEvent(hEvent); + // cppcheck-suppress uninitvar + SetEvent(hEvent); + // cppcheck-suppress uninitvar + CloseHandle(hEvent); } void allocDealloc_GetModuleHandleEx()