mirror of
https://github.com/reactos/reactos.git
synced 2024-11-20 14:30:57 +00:00
c5dde308bf
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
56 lines
1.8 KiB
C
56 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);
|
|
}
|