From 0ec2d5f40d39ed1c256a84ec9db5cad28ccbe890 Mon Sep 17 00:00:00 2001 From: orbitcowboy Date: Mon, 2 May 2022 11:58:31 +0200 Subject: [PATCH] std.cfg: Improved configuration of qsort(). --- cfg/std.cfg | 2 ++ test/cfg/std.c | 13 +++++++++++++ test/cfg/std.cpp | 12 ++++++++++++ 3 files changed, 27 insertions(+) diff --git a/cfg/std.cfg b/cfg/std.cfg index cb1bf28cc..122b05c12 100644 --- a/cfg/std.cfg +++ b/cfg/std.cfg @@ -4340,6 +4340,7 @@ The obsolete function 'gets' is called. With 'gets' you'll get a buffer overrun + @@ -4352,6 +4353,7 @@ The obsolete function 'gets' is called. With 'gets' you'll get a buffer overrun + diff --git a/test/cfg/std.c b/test/cfg/std.c index b19b85378..dfd11c27f 100644 --- a/test/cfg/std.c +++ b/test/cfg/std.c @@ -26,6 +26,19 @@ #include #include + +int qsort_cmpfunc (const void * a, const void * b) { + return (*(int*)a - *(int*)b); +} +void nullPointer_qsort(void *base, size_t n, size_t size, int (*cmp)(const void *, const void *)) +{ + // cppcheck-suppress nullPointer + qsort(NULL, n, size, qsort_cmpfunc); + // cppcheck-suppress nullPointer + qsort(base, n, size, NULL); + qsort(base, n, size, qsort_cmpfunc); +} + // As with all bounds-checked functions, localtime_s is only guaranteed to be available if __STDC_LIB_EXT1__ is defined by the implementation and if the user defines __STDC_WANT_LIB_EXT1__ to the integer constant 1 before including time.h. #ifdef __STDC_LIB_EXT1__ void uninitvar_localtime_s(const time_t *restrict time, struct tm *restrict result) diff --git a/test/cfg/std.cpp b/test/cfg/std.cpp index ebda59a51..3dfcc5bca 100644 --- a/test/cfg/std.cpp +++ b/test/cfg/std.cpp @@ -32,6 +32,18 @@ #include #include +int qsort_cmpfunc (const void * a, const void * b) { + return (*static_cast(a) - *static_cast(b)); +} +void nullPointer_qsort(void *base, std::size_t n, std::size_t size, int (*cmp)(const void *, const void *)) +{ + // cppcheck-suppress nullPointer + std::qsort(nullptr, n, size, qsort_cmpfunc); + // cppcheck-suppress nullPointer + std::qsort(base, n, size, nullptr); + std::qsort(base, n, size, qsort_cmpfunc); +} + void *bufferAccessOutOfBounds_memchr(void *s, int c, size_t n) { char buf[42]={0};