From d67ea4d76861db63d3a65fbdcc1c206ab718e63a Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 22 Nov 2019 12:46:23 +0000 Subject: [PATCH] CPP: Tests: AV Rule 79 test cases for calloc, realloc and new. --- .../jsf/4.10 Classes/AV Rule 79/AV Rule 79.cpp | 17 +++++++++++------ .../4.10 Classes/AV Rule 79/AV Rule 79.expected | 3 +++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/cpp/ql/test/query-tests/jsf/4.10 Classes/AV Rule 79/AV Rule 79.cpp b/cpp/ql/test/query-tests/jsf/4.10 Classes/AV Rule 79/AV Rule 79.cpp index a73f1c9ba0f..6fb9815dd74 100644 --- a/cpp/ql/test/query-tests/jsf/4.10 Classes/AV Rule 79/AV Rule 79.cpp +++ b/cpp/ql/test/query-tests/jsf/4.10 Classes/AV Rule 79/AV Rule 79.cpp @@ -54,12 +54,12 @@ public: myFile1 = fopen("file1.txt", "rt"); // GOOD myFile2 = fopen("file2.txt", "rt"); // BAD: not closed in destructor + myArray1 = (int *)calloc(100, sizeof(int)); // BAD: not freed in destructor + myArray2 = new int[100]; // BAD: not deleted in destructor + myArray3 = new int[100]; // GOOD: deleted in destructor - - - - - + myPtr7 = (int*)realloc(0, sizeof(int)); // GOOD: freed below (assuming the realloc succeeds) + myPtr8 = (int*)realloc(myPtr7, sizeof(int)); // BAD: not freed in destructor } ~MyClass() @@ -67,7 +67,7 @@ public: delete myPtr1; free(myPtr3); fclose(myFile1); - + delete [] myArray3; } void close() @@ -85,6 +85,11 @@ public: AutoPtr myAutoPtr; FILE *myFile1; FILE *myFile2; + int *myArray1; + int *myArray2; + int *myArray3; + int *myPtr7; + int *myPtr8; }; int main() diff --git a/cpp/ql/test/query-tests/jsf/4.10 Classes/AV Rule 79/AV Rule 79.expected b/cpp/ql/test/query-tests/jsf/4.10 Classes/AV Rule 79/AV Rule 79.expected index 5bf3e6c5010..1d0ef245f3b 100644 --- a/cpp/ql/test/query-tests/jsf/4.10 Classes/AV Rule 79/AV Rule 79.expected +++ b/cpp/ql/test/query-tests/jsf/4.10 Classes/AV Rule 79/AV Rule 79.expected @@ -3,6 +3,9 @@ | AV Rule 79.cpp:49:3:49:18 | ... = ... | Resource myPtr5 is acquired by class MyClass but not released in the destructor. It is released from close on line 75, so this function may need to be called from the destructor. | | AV Rule 79.cpp:50:3:50:37 | ... = ... | Resource myPtr6 is acquired by class MyClass but not released in the destructor. It is released from close on line 76, so this function may need to be called from the destructor. | | AV Rule 79.cpp:55:3:55:36 | ... = ... | Resource myFile2 is acquired by class MyClass but not released anywhere in this class. | +| AV Rule 79.cpp:57:3:57:44 | ... = ... | Resource myArray1 is acquired by class MyClass but not released anywhere in this class. | +| AV Rule 79.cpp:58:3:58:25 | ... = ... | Resource myArray2 is acquired by class MyClass but not released anywhere in this class. | +| AV Rule 79.cpp:62:3:62:45 | ... = ... | Resource myPtr8 is acquired by class MyClass but not released anywhere in this class. | | Container2.cpp:21:3:21:16 | ... = ... | Resource ptr3 is acquired by class Container2 but not released anywhere in this class. | | Container2.cpp:21:3:21:16 | ... = ... | Resource ptr3 is acquired by class Container2 but not released anywhere in this class. | | DeleteThis.cpp:56:3:56:24 | ... = ... | Resource ptr10 is acquired by class MyClass3 but not released anywhere in this class. |