From 883c248dafb3e1a6f3f1b72dffd89a9be7452a5d Mon Sep 17 00:00:00 2001 From: orbitcowboy Date: Fri, 9 Jun 2023 17:18:19 +0200 Subject: [PATCH 1/4] Added test case from #8302 and a TODO --- test/testleakautovar.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/testleakautovar.cpp b/test/testleakautovar.cpp index a873e469c9d..72e6f107794 100644 --- a/test/testleakautovar.cpp +++ b/test/testleakautovar.cpp @@ -112,6 +112,7 @@ class TestLeakAutoVar : public TestFixture { TEST_CASE(deallocuse8); // #1765 TEST_CASE(deallocuse9); // #9781 TEST_CASE(deallocuse10); + TEST_CASE(deallocuse11); // #8302 TEST_CASE(doublefree1); TEST_CASE(doublefree2); @@ -840,6 +841,22 @@ class TestLeakAutoVar : public TestFixture { ASSERT_EQUALS("[test.c:2] -> [test.c:3]: (error) Returning/dereferencing 'p' after it is deallocated / released\n", errout.str()); } + void deallocuse11() { // #8302 + check("int f() {\n" + " int *array = new int[42];\n" + " delete [] array;\n" + " return array[1];" // << + "}"); + TODO_ASSERT_EQUALS("[test.c:3] -> [test.c:4]: (error) Returning/dereferencing 'array' after it is deallocated / released\n", "", errout.str()); + + check("int f() {\n" + " int *array = (int*)malloc(40);\n" + " free(array);\n" + " return array[1];" // << + "}"); + ASSERT_EQUALS("[test.c:3] -> [test.c:4]: (error) Returning/dereferencing 'array' after it is deallocated / released\n", errout.str()); + } + void doublefree1() { // #3895 check("void f(char *p) {\n" " if (x)\n" From 9232dfe22f53794e6916f648a3e562d6994aa93a Mon Sep 17 00:00:00 2001 From: orbitcowboy Date: Fri, 9 Jun 2023 17:28:41 +0200 Subject: [PATCH 2/4] Check with in C++ mode to get rid of TODO. --- test/testleakautovar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/testleakautovar.cpp b/test/testleakautovar.cpp index 72e6f107794..1109385e2a8 100644 --- a/test/testleakautovar.cpp +++ b/test/testleakautovar.cpp @@ -846,8 +846,8 @@ class TestLeakAutoVar : public TestFixture { " int *array = new int[42];\n" " delete [] array;\n" " return array[1];" // << - "}"); - TODO_ASSERT_EQUALS("[test.c:3] -> [test.c:4]: (error) Returning/dereferencing 'array' after it is deallocated / released\n", "", errout.str()); + "}", true); + ASSERT_EQUALS("[test.c:3] -> [test.c:4]: (error) Returning/dereferencing 'array' after it is deallocated / released\n", errout.str()); check("int f() {\n" " int *array = (int*)malloc(40);\n" From e74dc59d7fb2c35bd88a772e63f17b907e36f502 Mon Sep 17 00:00:00 2001 From: orbitcowboy Date: Fri, 9 Jun 2023 17:34:11 +0200 Subject: [PATCH 3/4] Updated expected error message text --- test/testleakautovar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testleakautovar.cpp b/test/testleakautovar.cpp index 1109385e2a8..d2d98021d42 100644 --- a/test/testleakautovar.cpp +++ b/test/testleakautovar.cpp @@ -838,7 +838,7 @@ class TestLeakAutoVar : public TestFixture { " free(p);\n" " return p[1];\n" "}\n"); - ASSERT_EQUALS("[test.c:2] -> [test.c:3]: (error) Returning/dereferencing 'p' after it is deallocated / released\n", errout.str()); + ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:4]: (error) Returning/dereferencing 'array' after it is deallocated / released\n", errout.str()); } void deallocuse11() { // #8302 From 73bb12ae15daaed656bbae5012759a47953a6666 Mon Sep 17 00:00:00 2001 From: orbitcowboy Date: Fri, 9 Jun 2023 17:40:24 +0200 Subject: [PATCH 4/4] Updated expected error message text --- test/testleakautovar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/testleakautovar.cpp b/test/testleakautovar.cpp index d2d98021d42..42f2416f12d 100644 --- a/test/testleakautovar.cpp +++ b/test/testleakautovar.cpp @@ -838,7 +838,7 @@ class TestLeakAutoVar : public TestFixture { " free(p);\n" " return p[1];\n" "}\n"); - ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:4]: (error) Returning/dereferencing 'array' after it is deallocated / released\n", errout.str()); + ASSERT_EQUALS("[test.c:2] -> [test.c:3]: (error) Returning/dereferencing 'p' after it is deallocated / released\n", errout.str()); } void deallocuse11() { // #8302 @@ -847,7 +847,7 @@ class TestLeakAutoVar : public TestFixture { " delete [] array;\n" " return array[1];" // << "}", true); - ASSERT_EQUALS("[test.c:3] -> [test.c:4]: (error) Returning/dereferencing 'array' after it is deallocated / released\n", errout.str()); + ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:4]: (error) Returning/dereferencing 'array' after it is deallocated / released\n", errout.str()); check("int f() {\n" " int *array = (int*)malloc(40);\n"