From f9f83da31803062d1fb665ad612ccede5e445757 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sun, 9 Jul 2023 18:03:34 +0200 Subject: Add tests for stdio.h --- tests/Makefile | 6 ++++++ tests/test_fread_int_overflow.c | 14 ++++++++++++++ tests/test_fread_overwrite.c | 18 ++++++++++++++++++ tests/test_fwrite_int_overflow.c | 14 ++++++++++++++ tests/test_fwrite_overwrite.c | 18 ++++++++++++++++++ tests/test_vsnprintf.c | 28 ++++++++++++++++++++++++++++ tests/test_vsprintf.c | 28 ++++++++++++++++++++++++++++ 7 files changed, 126 insertions(+) create mode 100644 tests/test_fread_int_overflow.c create mode 100644 tests/test_fread_overwrite.c create mode 100644 tests/test_fwrite_int_overflow.c create mode 100644 tests/test_fwrite_overwrite.c create mode 100644 tests/test_vsnprintf.c create mode 100644 tests/test_vsprintf.c diff --git a/tests/Makefile b/tests/Makefile index d240a97..49ae984 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -51,6 +51,12 @@ TARGETS= \ test_readlink \ test_ttyname_r \ test_write \ + test_fread_int_overflow \ + test_fread_overwrite \ + test_fwrite_int_overflow \ + test_fwrite_overwrite \ + test_vsnprintf \ + test_vsprintf \ .SILENT: diff --git a/tests/test_fread_int_overflow.c b/tests/test_fread_int_overflow.c new file mode 100644 index 0000000..2f0c43f --- /dev/null +++ b/tests/test_fread_int_overflow.c @@ -0,0 +1,14 @@ +#include "common.h" + +#include + +int main(int argc, char** argv) { + char buffer[12] = {0}; + + CHK_FAIL_START + fread(buffer, (size_t)-1, (size_t)-1, NULL); + CHK_FAIL_END + + puts(buffer); + return ret; +} diff --git a/tests/test_fread_overwrite.c b/tests/test_fread_overwrite.c new file mode 100644 index 0000000..2710d24 --- /dev/null +++ b/tests/test_fread_overwrite.c @@ -0,0 +1,18 @@ +#include + +#include "common.h" + +#include + +int main(int argc, char** argv) { + char buffer[12] = {0}; + + assert(sizeof(buffer - 2) * 10 > sizeof(buffer)); + + CHK_FAIL_START + fread(buffer, sizeof(buffer) - 2, 10, NULL); + CHK_FAIL_END + + puts(buffer); + return ret; +} diff --git a/tests/test_fwrite_int_overflow.c b/tests/test_fwrite_int_overflow.c new file mode 100644 index 0000000..1655498 --- /dev/null +++ b/tests/test_fwrite_int_overflow.c @@ -0,0 +1,14 @@ +#include "common.h" + +#include + +int main(int argc, char** argv) { + char buffer[12] = {0}; + + CHK_FAIL_START + fwrite(buffer, (size_t)-1, (size_t)-1, NULL); + CHK_FAIL_END + + puts(buffer); + return ret; +} diff --git a/tests/test_fwrite_overwrite.c b/tests/test_fwrite_overwrite.c new file mode 100644 index 0000000..b3767f8 --- /dev/null +++ b/tests/test_fwrite_overwrite.c @@ -0,0 +1,18 @@ +#include + +#include "common.h" + +#include + +int main(int argc, char** argv) { + char buffer[12] = {0}; + + assert(sizeof(buffer - 2) * 10 > sizeof(buffer)); + + CHK_FAIL_START + fwrite(buffer, sizeof(buffer) - 2, 10, NULL); + CHK_FAIL_END + + puts(buffer); + return ret; +} diff --git a/tests/test_vsnprintf.c b/tests/test_vsnprintf.c new file mode 100644 index 0000000..f1263a8 --- /dev/null +++ b/tests/test_vsnprintf.c @@ -0,0 +1,28 @@ +#include "common.h" + +#include +#include + +char buffer[12] = {0}; + +int msg_valid(int n, const char * format, ... ) { + va_list args; + va_start (args, format); + vsnprintf(buffer, n, format, args); + va_end (args); +} + +int msg(int n, const char * format, ... ) { + va_list args; + va_start (args, format); + CHK_FAIL_START + vsnprintf(buffer, n, format, args); + CHK_FAIL_END + va_end (args); + return ret; +} + +int main(int argc, char** argv) { + msg_valid(sizeof(buffer), "%s", "1234567890ABCDEF"); + return msg(sizeof(buffer)+1, "%s", "1234567890ABCDEF"); +} diff --git a/tests/test_vsprintf.c b/tests/test_vsprintf.c new file mode 100644 index 0000000..740816f --- /dev/null +++ b/tests/test_vsprintf.c @@ -0,0 +1,28 @@ +#include "common.h" + +#include +#include + +char buffer[12] = {0}; + +int msg_valid(const char * format, ... ) { + va_list args; + va_start (args, format); + vsprintf(buffer, format, args); + va_end (args); +} + +int msg(int n, const char * format, ... ) { + va_list args; + va_start (args, format); + CHK_FAIL_START + vsprintf(buffer, format, args); + CHK_FAIL_END + va_end (args); + return ret; +} + +int main(int argc, char** argv) { + msg_valid("%s", "1234567"); + return msg("%s", "1234567890ABCDEF"); +} -- cgit v1.3