From cb1ce9e1815a492de0f13c2b046b8472024b9f6d Mon Sep 17 00:00:00 2001 From: jvoisin Date: Wed, 14 Jun 2023 14:59:11 +0200 Subject: Add tests for strncpy and handle overlapping buffers there --- tests/Makefile | 33 ++++++++++++++++++--------------- tests/test_strncpy_overwrite_over.c | 15 +++++++++++++++ tests/test_strncpy_overwrite_under.c | 15 +++++++++++++++ tests/test_strncpy_static_write.c | 16 ++++++++++++++++ 4 files changed, 64 insertions(+), 15 deletions(-) create mode 100644 tests/test_strncpy_overwrite_over.c create mode 100644 tests/test_strncpy_overwrite_under.c create mode 100644 tests/test_strncpy_static_write.c (limited to 'tests') diff --git a/tests/Makefile b/tests/Makefile index 2c4e067..80a4626 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -2,21 +2,24 @@ CC=../x86_64-linux-musl-native/bin/gcc GCOV=../x86_64-linux-musl-native/bin/gcov CFLAGS=-I../include/ -D_FORTIFY_SOURCE=3 -static -O2 -TARGETS=test_memcpy_static_write \ - test_memcpy_dynamic_write \ - test_memcpy_static_read \ - test_memcpy_dynamic_read \ - test_memmove_static_write \ - test_memmove_dynamic_write \ - test_memmove_static_read \ - test_memmove_dynamic_read \ - test_memset_static_write \ - test_memset_dynamic_write \ - test_strcpy_static_write \ - test_strcat_static_write \ - test_strcpy_overwrite_over \ - test_strcpy_overwrite_under\ - test_getcwd \ +TARGETS=test_memcpy_static_write \ + test_memcpy_dynamic_write \ + test_memcpy_static_read \ + test_memcpy_dynamic_read \ + test_memmove_static_write \ + test_memmove_dynamic_write \ + test_memmove_static_read \ + test_memmove_dynamic_read \ + test_memset_static_write \ + test_memset_dynamic_write \ + test_strcpy_static_write \ + test_strcat_static_write \ + test_strcpy_overwrite_over \ + test_strcpy_overwrite_under \ + test_strncpy_static_write \ + test_strncpy_overwrite_over \ + test_strncpy_overwrite_under \ + test_getcwd \ .SILENT: diff --git a/tests/test_strncpy_overwrite_over.c b/tests/test_strncpy_overwrite_over.c new file mode 100644 index 0000000..d584bcc --- /dev/null +++ b/tests/test_strncpy_overwrite_over.c @@ -0,0 +1,15 @@ +#include "common.h" + +#include + +int main(int argc, char** argv) { + char buffer[9] = {'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', '\0'}; + puts(buffer); + + CHK_FAIL_START + strncpy(buffer+1, buffer, 5); + CHK_FAIL_END + + puts(buffer); + return ret; +} diff --git a/tests/test_strncpy_overwrite_under.c b/tests/test_strncpy_overwrite_under.c new file mode 100644 index 0000000..f554b28 --- /dev/null +++ b/tests/test_strncpy_overwrite_under.c @@ -0,0 +1,15 @@ +#include "common.h" + +#include + +int main(int argc, char** argv) { + char buffer[9] = {'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', '\0'}; + puts(buffer); + + CHK_FAIL_START + strncpy(buffer-1, buffer, 5); + CHK_FAIL_END + + puts(buffer); + return ret; +} diff --git a/tests/test_strncpy_static_write.c b/tests/test_strncpy_static_write.c new file mode 100644 index 0000000..e619288 --- /dev/null +++ b/tests/test_strncpy_static_write.c @@ -0,0 +1,16 @@ +#include "common.h" + +#include + +int main(int argc, char** argv) { + char buffer[8] = {0}; + strncpy(buffer, "1234567", 5); + puts(buffer); + + CHK_FAIL_START + strncpy(buffer, "1234567890", 10); + CHK_FAIL_END + + puts(buffer); + return ret; +} -- cgit v1.3