From 909f7439d005c159e23bb1bef226315c8bd6ae59 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 26 Dec 2015 19:20:54 +0000 Subject: [PATCH] [CRT_APITEST] - disable GCC builtins - Add simple tests for strlen, showing that a NULL pointer will cause an access violation, which is broken in our asm implementation svn path=/trunk/; revision=70427 --- rostests/apitests/crt/CMakeLists.txt | 4 ++ .../apitests/crt/crtdll_crt_apitest.cmake | 2 +- .../apitests/crt/msvcrt_crt_apitest.cmake | 2 +- rostests/apitests/crt/ntdll_crt_apitest.cmake | 2 +- rostests/apitests/crt/strlen.c | 48 +++++++++++++++++++ rostests/apitests/crt/testlist.c | 2 + 6 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 rostests/apitests/crt/strlen.c diff --git a/rostests/apitests/crt/CMakeLists.txt b/rostests/apitests/crt/CMakeLists.txt index b6d98b0938c..9525d2c02dd 100644 --- a/rostests/apitests/crt/CMakeLists.txt +++ b/rostests/apitests/crt/CMakeLists.txt @@ -1,4 +1,8 @@ +if(GCC) + add_compile_flags("-fno-builtin") +endif() + include(ntdll_crt_apitest.cmake) include(msvcrt_crt_apitest.cmake) diff --git a/rostests/apitests/crt/crtdll_crt_apitest.cmake b/rostests/apitests/crt/crtdll_crt_apitest.cmake index 4556838e2ac..a1a339512b3 100644 --- a/rostests/apitests/crt/crtdll_crt_apitest.cmake +++ b/rostests/apitests/crt/crtdll_crt_apitest.cmake @@ -466,7 +466,7 @@ list(APPEND SOURCE_CRTDLL # strcspn.c # strerror.c # strftime.c -# strlen.c + strlen.c # strncat.c # strncmp.c # strncpy.c diff --git a/rostests/apitests/crt/msvcrt_crt_apitest.cmake b/rostests/apitests/crt/msvcrt_crt_apitest.cmake index 157bd781892..ae02f6ad6e4 100644 --- a/rostests/apitests/crt/msvcrt_crt_apitest.cmake +++ b/rostests/apitests/crt/msvcrt_crt_apitest.cmake @@ -1173,7 +1173,7 @@ list(APPEND SOURCE_MSVCRT # strerror.c # strerror_s.c # strftime.c -# strlen.c + strlen.c # strncat.c # strncat_s # strncmp.c diff --git a/rostests/apitests/crt/ntdll_crt_apitest.cmake b/rostests/apitests/crt/ntdll_crt_apitest.cmake index 93a27f9a013..5d172b11076 100644 --- a/rostests/apitests/crt/ntdll_crt_apitest.cmake +++ b/rostests/apitests/crt/ntdll_crt_apitest.cmake @@ -88,7 +88,7 @@ list(APPEND SOURCE_NTDLL # strcmp.c strcpy.c # strcspn.c -# strlen.c + strlen.c # strncat.c # strncmp.c # strncpy.c diff --git a/rostests/apitests/crt/strlen.c b/rostests/apitests/crt/strlen.c new file mode 100644 index 00000000000..ed88c048ec6 --- /dev/null +++ b/rostests/apitests/crt/strlen.c @@ -0,0 +1,48 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Test for strlen + * PROGRAMMER: Timo Kreuzer + */ + +#include + +#include +#include +#include +#include +typedef _Return_type_success_(return >= 0) long NTSTATUS, *PNTSTATUS; + +#ifdef __GNUC__ +#pragma GCC diagnostic ignored "-Wnonnull" + +size_t +GCC_builtin_strlen(const char *str) +{ + return __builtin_strlen(str); +} +#endif + +typedef size_t (*PFN_STRLEN)(const char *); + +void +Test_strlen(PFN_STRLEN pstrlen) +{ + size_t len; + + /* basic parameter tests */ + StartSeh() + len = pstrlen(NULL); + EndSeh(STATUS_ACCESS_VIOLATION); + (void)len; + + ok_int((int)pstrlen("test"), 4); +} + +START_TEST(strlen) +{ + Test_strlen(strlen); +#ifdef __GNUC__ + Test_strlen(GCC_builtin_strlen); +#endif // __GNUC__ +} diff --git a/rostests/apitests/crt/testlist.c b/rostests/apitests/crt/testlist.c index 92c61113e09..dc00da5533e 100644 --- a/rostests/apitests/crt/testlist.c +++ b/rostests/apitests/crt/testlist.c @@ -15,6 +15,7 @@ extern void func__vsnwprintf(void); extern void func_mbstowcs(void); extern void func_sprintf(void); extern void func_strcpy(void); +extern void func_strlen(void); extern void func_wcstombs(void); extern void func_static_construct(void); @@ -27,6 +28,7 @@ const struct test winetest_testlist[] = { "mbstowcs", func_mbstowcs }, { "sprintf", func_sprintf }, { "strcpy", func_strcpy }, + { "strlen", func_strlen }, { "wcstombs", func_wcstombs }, #if defined(TEST_CRTDLL) || defined(TEST_MSVCRT) || defined(TEST_STATIC_CRT) // ...