diff --git a/cfg/std.cfg b/cfg/std.cfg
index e48b9c672b4..2968247285c 100644
--- a/cfg/std.cfg
+++ b/cfg/std.cfg
@@ -4820,6 +4820,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 e4fa9db4a07..7d7a65b3851 100644
--- a/test/cfg/std.c
+++ b/test/cfg/std.c
@@ -3446,7 +3446,7 @@ void bufferAccessOutOfBounds_strcat(char *dest, const char * const source)
char buf4[4] = {0};
const char * const srcstr3 = "123";
const char * const srcstr4 = "1234";
- // @todo #8599 cppcheck-suppress bufferAccessOutOfBounds
+ // cppcheck-suppress bufferAccessOutOfBounds
(void)strcat(buf4,srcstr4); // off by one issue: strcat is appends \0' at the end
// no warning shall be shown for
diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp
index 3402d8452bf..ea5758b8742 100644
--- a/test/testbufferoverrun.cpp
+++ b/test/testbufferoverrun.cpp
@@ -3151,6 +3151,20 @@ class TestBufferOverrun : public TestFixture {
" strcat(n, \"def\");\n"
"}");
TODO_ASSERT_EQUALS("[test.cpp:5]: (error) Buffer is accessed out of bounds: n\n", "", errout_str());
+
+ check("void f()\n" // #12489
+ "{\n"
+ " char d[3] = {};\n"
+ " strcat(d, \"12345678\");\n"
+ "}");
+ ASSERT_EQUALS("[test.cpp:4]: (error) Buffer is accessed out of bounds: d\n", errout_str());
+
+ check("void f()\n"
+ "{\n"
+ " char d[3] = \"ab\"; \n"
+ " strcat(d, \"c\");\n"
+ "}");
+ TODO_ASSERT_EQUALS("[test.cpp:4]: (error) Buffer is accessed out of bounds: d\n", "", errout_str());
}
void buffer_overrun_7() {