From 33d7c5a5aefb4445e3e769d510f64286abe94291 Mon Sep 17 00:00:00 2001 From: Peter Limkilde Svendsen <peter.limkilde@gmail.com> Date: Sun, 28 Jul 2024 14:01:47 +0200 Subject: [PATCH] Fix wcpncpy test --- tests/wchar/wcpncpy.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/tests/wchar/wcpncpy.c b/tests/wchar/wcpncpy.c index 0b78f479a..62c0bdb4e 100644 --- a/tests/wchar/wcpncpy.c +++ b/tests/wchar/wcpncpy.c @@ -4,15 +4,34 @@ int main() { wchar_t src[] = L"Привет мир"; - wchar_t dest[10]; - wchar_t* result = wcpncpy(dest, src, 5); - assert(wcsncmp(dest, src, 5) == 0); + size_t n_input = 10; + size_t n_short = 6; + size_t n_long = 15; - // FIXME: seems to read from uninitialized memory? - // assert(*result == L'\0'); + // Initialize with sentinel values to detect exactly how much is overwritten + wchar_t dest_short[] = L"\x12\x34\x56\x78\x90\x12\x34\x56\x78\x90\x12\x34\x56\x78"; + wchar_t dest_long[] = L"\x12\x34\x56\x78\x90\x12\x34\x56\x78\x90\x12\x34\x56\x78"; - assert(result == dest + 5); + wchar_t expected_short[] = L"Привет\x34\x56\x78\x90\x12\x34\x56\x78"; + + // The "short" test should copy exactly n_short characters without terminating null + wchar_t* result_short = wcpncpy(dest_short, src, n_short); + assert(wcsncmp(dest_short, src, n_short) == 0); + assert(result_short == dest_short + n_short); + for (size_t i = n_short; i < n_long; i++) { + // Check that the sentinel characters have not been overwritten + assert(dest_short[i] == expected_short[i]); + } + + // The "long" test should write the input string, with nulls appended up to n_long + wchar_t* result_long = wcpncpy(dest_long, src, n_long); + assert(wcsncmp(dest_long, src, n_long) == 0); + assert(result_long == dest_long + n_input); + for (size_t i = n_input; i < n_long; i++) { + // Check that nulls are written up to n_long + assert(dest_long[i] == L'\0'); + } return 0; } -- GitLab