reactos/rostests/apitests/kernel32/lstrlen.c
Hermès Bélusca-Maïto c5dde308bf [KERNEL32_APITEST]: Add basic tests for lstrlenA/W, focusing on its special handling of the NULL pointer.
We detect that the NULL pointer is handled separately because no exception is generated, contrary to when the function is called with truly invalid pointers.
I thank Mark for having mentioned the vectored exception handling to me, needed to catch first-chance exceptions.

svn path=/trunk/; revision=74118
2017-03-06 19:14:27 +00:00

57 lines
1.8 KiB
C

/*
* PROJECT: ReactOS api tests
* LICENSE: GPLv2+ - See COPYING in the top level directory
* PURPOSE: Tests for lstrlenA/W
* PROGRAMMER: Hermes Belusca-Maito
*/
#include <apitest.h>
#define WIN32_NO_STATUS
#include <stdio.h>
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(<invalid_ptr>) */
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);
}