diff --git a/rostests/apitests/kernel32/CMakeLists.txt b/rostests/apitests/kernel32/CMakeLists.txt index a6fe595aca4..4fbde1f4b03 100644 --- a/rostests/apitests/kernel32/CMakeLists.txt +++ b/rostests/apitests/kernel32/CMakeLists.txt @@ -14,6 +14,7 @@ list(APPEND SOURCE interlck.c LoadLibraryExW.c lstrcpynW.c + lstrlen.c MultiByteToWideChar.c PrivMoveFileIdentityW.c SetConsoleWindowInfo.c diff --git a/rostests/apitests/kernel32/lstrlen.c b/rostests/apitests/kernel32/lstrlen.c new file mode 100644 index 00000000000..69db9ae18e7 --- /dev/null +++ b/rostests/apitests/kernel32/lstrlen.c @@ -0,0 +1,56 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Tests for lstrlenA/W + * PROGRAMMER: Hermes Belusca-Maito + */ + +#include + +#define WIN32_NO_STATUS +#include + +LONG WINAPI VEHandler_1(PEXCEPTION_POINTERS ExceptionInfo) +{ + /* + * Vectored Exception Handler possibly called for lstrlen(NULL). + * Expected not to be called! + */ + ok(FALSE, "VEHandler_1 called!\n"); + return EXCEPTION_CONTINUE_SEARCH; +} + +LONG WINAPI VEHandler_2(PEXCEPTION_POINTERS ExceptionInfo) +{ + /* Vectored Exception Handler that should be called for lstrlen() */ + ok(TRUE, "VEHandler_2 not called?\n"); + return EXCEPTION_CONTINUE_SEARCH; +} + +START_TEST(lstrlen) +{ + PVOID pVEH; + + /* Test basic functionality */ + ok(lstrlenA( "Hello World!") == 12, "lstrlenA failed!\n"); + ok(lstrlenW(L"Hello World!") == 12, "lstrlenW failed!\n"); + + /* + * NULL buffer is special and is considered separately; + * no internal exception is generated. + * Use Vectored Exception Handling to monitor for first-chance exceptions. + */ +pVEH = AddVectoredExceptionHandler(1, VEHandler_1); + ok(lstrlenA(NULL) == 0, "lstrlenA should have returned 0.\n"); + ok(lstrlenW(NULL) == 0, "lstrlenW should have returned 0.\n"); +RemoveVectoredExceptionHandler(pVEH); + + /* + * Test some invalid buffers. Internal exceptions should be generated. + * Use Vectored Exception Handling to monitor for first-chance exceptions. + */ +pVEH = AddVectoredExceptionHandler(1, VEHandler_2); + ok(lstrlenA( (LPSTR)0xbaadf00d) == 0, "lstrlenA should have returned 0.\n"); + ok(lstrlenW((LPWSTR)0xbaadf00d) == 0, "lstrlenW should have returned 0.\n"); +RemoveVectoredExceptionHandler(pVEH); +} diff --git a/rostests/apitests/kernel32/testlist.c b/rostests/apitests/kernel32/testlist.c index 002aa406350..f1beea841a6 100644 --- a/rostests/apitests/kernel32/testlist.c +++ b/rostests/apitests/kernel32/testlist.c @@ -15,6 +15,7 @@ extern void func_GetModuleFileName(void); extern void func_interlck(void); extern void func_LoadLibraryExW(void); extern void func_lstrcpynW(void); +extern void func_lstrlen(void); extern void func_Mailslot(void); extern void func_MultiByteToWideChar(void); extern void func_PrivMoveFileIdentityW(void); @@ -39,6 +40,7 @@ const struct test winetest_testlist[] = { "interlck", func_interlck }, { "LoadLibraryExW", func_LoadLibraryExW }, { "lstrcpynW", func_lstrcpynW }, + { "lstrlen", func_lstrlen }, { "MailslotRead", func_Mailslot }, { "MultiByteToWideChar", func_MultiByteToWideChar }, { "PrivMoveFileIdentityW", func_PrivMoveFileIdentityW },