From 53ebb55e1fe0fe8d4100f552838cfb1b018ad5b8 Mon Sep 17 00:00:00 2001 From: orbitcowboy Date: Wed, 27 Apr 2022 10:09:23 +0200 Subject: [PATCH] std.cfg: Improved configuration of setvbuf(). --- cfg/std.cfg | 6 ++++++ test/cfg/std.c | 16 ++++++++++++++++ test/cfg/std.cpp | 24 ++++++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/cfg/std.cfg b/cfg/std.cfg index 981bd392b..e63a9a413 100644 --- a/cfg/std.cfg +++ b/cfg/std.cfg @@ -49,6 +49,9 @@ + + + @@ -4665,9 +4668,12 @@ The obsolete function 'gets' is called. With 'gets' you'll get a buffer overrun + + + 0:2 diff --git a/test/cfg/std.c b/test/cfg/std.c index 4d9d08333..8310686ea 100644 --- a/test/cfg/std.c +++ b/test/cfg/std.c @@ -3120,6 +3120,22 @@ void nullPointer_setbuf(FILE *stream, char *buf) setbuf(stream,buf); } +int bufferAccessOutOfBounds_setvbuf(FILE* stream, int mode, size_t size) +{ + char buf[42]={0}; + // cppcheck-suppress bufferAccessOutOfBounds + (void) setvbuf(stream, buf, mode, 43); + return setvbuf(stream, buf, mode, 42); +} + +int nullPointer_setvbuf(FILE* stream, char *buf, int mode, size_t size) +{ + // cppcheck-suppress nullPointer + (void) setvbuf(NULL, buf, mode, size); + (void) setvbuf(stream, NULL, mode, size); + return setvbuf(stream, buf, mode, size); +} + void uninitvar_setbuf(void) { FILE *stream; diff --git a/test/cfg/std.cpp b/test/cfg/std.cpp index 9e54f5e53..6be4cd6db 100644 --- a/test/cfg/std.cpp +++ b/test/cfg/std.cpp @@ -2615,6 +2615,30 @@ void uninivar_setbuf(void) (void)std::setbuf(stream,buf); } +void nullPointer_setbuf(FILE *stream, char *buf) +{ + // cppcheck-suppress nullPointer + std::setbuf(NULL,buf); + std::setbuf(stream,NULL); + std::setbuf(stream,buf); +} + +int bufferAccessOutOfBounds_setvbuf(FILE* stream, int mode, size_t size) +{ + char buf[42]={0}; + // cppcheck-suppress bufferAccessOutOfBounds + (void) std::setvbuf(stream, buf, mode, 43); + return std::setvbuf(stream, buf, mode, 42); +} + +int nullPointer_setvbuf(FILE* stream, char *buf, int mode, size_t size) +{ + // cppcheck-suppress nullPointer + (void) std::setvbuf(NULL, buf, mode, size); + (void) std::setvbuf(stream, NULL, mode, size); + return std::setvbuf(stream, buf, mode, size); +} + void uninivar_setvbuf(void) { FILE *stream;