--- /dev/null
+/*
+ * 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);
+}
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);
{ "interlck", func_interlck },
{ "LoadLibraryExW", func_LoadLibraryExW },
{ "lstrcpynW", func_lstrcpynW },
+ { "lstrlen", func_lstrlen },
{ "MailslotRead", func_Mailslot },
{ "MultiByteToWideChar", func_MultiByteToWideChar },
{ "PrivMoveFileIdentityW", func_PrivMoveFileIdentityW },