Update tests

This commit is contained in:
Joe Farebrother
2025-02-24 05:28:52 +00:00
parent 09694c448d
commit ecb3050780
7 changed files with 33 additions and 155 deletions

View File

@@ -1,119 +0,0 @@
| f1_0 = open() | open | |
| f1_1 = MethodCallsiteRefinement(f1_0) | open | |
| f1_2 = MethodCallsiteRefinement(f1_1) | closed | exit |
| f2_0 = open() | open | exit |
| f3_0 = open() | open | |
| f3_1 = MethodCallsiteRefinement(f3_0) | closed | exit |
| f4_0 = with | closed | |
| f4_1 = MethodCallsiteRefinement(f4_0) | closed | exit |
| f5_0 = open() | open | |
| f5_1 = MethodCallsiteRefinement(f5_0) | open | |
| f5_2 = MethodCallsiteRefinement(f5_1) | closed | exit |
| f5_3 = phi(f5_0, f5_1) | open | |
| f6_0 = None | closed | |
| f6_1 = open() | open | |
| f6_2 = MethodCallsiteRefinement(f6_1) | open | |
| f6_3 = phi(f6_0, f6_1, f6_2) | open | |
| f6_4 = Pi(f6_2) [true] | open | |
| f6_5 = MethodCallsiteRefinement(f6_4) | closed | |
| f6_6 = Pi(f6_3) [true] | open | |
| f6_7 = Pi(f6_2) [false] | closed | |
| f6_8 = phi(f6_5, f6_7) | closed | exit |
| f7_0 = None | closed | |
| f7_1 = open() | open | |
| f7_2 = MethodCallsiteRefinement(f7_1) | open | |
| f7_3 = phi(f7_0, f7_1, f7_2) | open | |
| f7_4 = Pi(f7_2) [true] | open | |
| f7_5 = MethodCallsiteRefinement(f7_4) | closed | |
| f7_6 = Pi(f7_3) [true] | open | |
| f7_7 = Pi(f7_2) [false] | closed | |
| f7_8 = phi(f7_5, f7_7) | closed | exit |
| f8_0 = None | closed | |
| f8_1 = open() | open | |
| f8_2 = MethodCallsiteRefinement(f8_1) | open | |
| f8_3 = phi(f8_0, f8_1, f8_2) | open | |
| f8_4 = Pi(f8_2) [true] | closed | |
| f8_5 = MethodCallsiteRefinement(f8_4) | closed | |
| f8_6 = Pi(f8_3) [true] | closed | |
| f8_7 = Pi(f8_2) [false] | open | |
| f8_8 = phi(f8_5, f8_7) | open | exit |
| f9_0 = None | closed | |
| f9_1 = open() | open | |
| f9_2 = MethodCallsiteRefinement(f9_1) | open | |
| f9_3 = phi(f9_0, f9_1, f9_2) | open | |
| f9_4 = Pi(f9_2) [true] | closed | |
| f9_5 = MethodCallsiteRefinement(f9_4) | closed | |
| f9_6 = Pi(f9_3) [true] | closed | |
| f9_7 = Pi(f9_2) [false] | open | |
| f9_8 = phi(f9_5, f9_7) | open | exit |
| f10_0 = open() | open | |
| f10_1 = MethodCallsiteRefinement(f10_0) | open | |
| f10_2 = MethodCallsiteRefinement(f10_1) | open | |
| f10_3 = MethodCallsiteRefinement(f10_2) | closed | |
| f10_4 = phi(f10_0, f10_1, f10_2, f10_3) | open | |
| f10_5 = MethodCallsiteRefinement(f10_4) | closed | |
| f10_6 = phi(f10_3, f10_5) | closed | exit |
| f11_0 = open() | open | |
| f11_1 = MethodCallsiteRefinement(f11_0) | open | |
| f11_2 = MethodCallsiteRefinement(f11_1) | open | |
| f11_3 = MethodCallsiteRefinement(f11_2) | closed | |
| f11_4 = phi(f11_0, f11_1, f11_2, f11_3) | open | |
| f11_5 = MethodCallsiteRefinement(f11_4) | closed | |
| f11_6 = phi(f11_3, f11_5) | closed | exit |
| f12_0 = open() | open | |
| f12_1 = MethodCallsiteRefinement(f12_0) | open | |
| f12_2 = MethodCallsiteRefinement(f12_1) | open | |
| f12_3 = MethodCallsiteRefinement(f12_2) | closed | |
| f12_4 = phi(f12_0, f12_1, f12_2, f12_3) | open | |
| f12_5 = MethodCallsiteRefinement(f12_4) | closed | |
| f12_6 = phi(f12_3, f12_5) | closed | exit |
| f13_0 = open() | open | |
| f13_1 = MethodCallsiteRefinement(f13_0) | open | exit |
| f14_0 = opener_func2() | open | |
| f14_1 = MethodCallsiteRefinement(f14_0) | open | |
| f14_2 = MethodCallsiteRefinement(f14_1) | closed | exit |
| f15_0 = opener_func2() | open | |
| f15_1 = ArgumentRefinement(f15_0) | closed | exit |
| f16_0 = ScopeEntryDefinition | closed | |
| f16_1 = open() | open | |
| f16_2 = MethodCallsiteRefinement(f16_1) | open | |
| f16_3 = MethodCallsiteRefinement(f16_2) | closed | |
| f16_4 = phi(f16_0, f16_1, f16_2, f16_3) | open | |
| f16_5 = phi(f16_3, f16_4) | open | exit |
| f17_0 = open() | open | |
| f17_1 = MethodCallsiteRefinement(f17_0) | open | |
| f17_2 = MethodCallsiteRefinement(f17_1) | open | |
| f17_3 = MethodCallsiteRefinement(f17_2) | closed | |
| f17_4 = phi(f17_0, f17_1, f17_2, f17_3) | open | |
| f17_5 = MethodCallsiteRefinement(f17_4) | closed | |
| f17_6 = phi(f17_3, f17_5) | closed | exit |
| f18_0 = open() | closed | |
| f18_1 = MethodCallsiteRefinement(f18_0) | closed | exit |
| f20_0 = open() | open | |
| f20_1 = ArgumentRefinement(f20_0) | closed | exit |
| f21_0 = open() | open | |
| f21_1 = MethodCallsiteRefinement(f21_0) | open | |
| f21_2 = MethodCallsiteRefinement(f21_1) | closed | |
| f21_3 = phi(f21_1, f21_2) | open | |
| f21_4 = phi(f21_0, f21_1, f21_2) | open | |
| f21_5 = Pi(f21_3) [true] | open | |
| f21_6 = MethodCallsiteRefinement(f21_5) | closed | |
| f21_7 = Pi(f21_4) [true] | open | |
| f21_8 = Pi(f21_3) [false] | closed | |
| f21_9 = phi(f21_6, f21_8) | closed | exit |
| f22_0 = open() | open | |
| f22_1 = MethodCallsiteRefinement(f22_0) | open | |
| f22_2 = MethodCallsiteRefinement(f22_1) | closed | |
| f22_3 = phi(f22_1, f22_2) | open | |
| f22_4 = phi(f22_0, f22_1, f22_2) | open | |
| f22_5 = Pi(f22_3) [true] | closed | |
| f22_6 = MethodCallsiteRefinement(f22_5) | closed | |
| f22_7 = Pi(f22_4) [true] | closed | |
| f22_8 = Pi(f22_3) [false] | open | |
| f22_9 = phi(f22_6, f22_8) | open | exit |
| f_0 = FunctionExpr | closed | exit |
| file_0 = open() | open | |
| file_1 = open() | open | |
| file_2 = None | closed | |
| file_3 = phi(file_0, file_1, file_2) | open | exit |
| fp_0 = ParameterDefinition | closed | exit |

View File

@@ -1,14 +0,0 @@
import python
import Resources.FileOpen
from EssaVariable v, EssaDefinition def, string open, string exit
where
def = v.getDefinition() and
v.getSourceVariable().getName().charAt(0) = "f" and
(
var_is_open(v, _) and open = "open"
or
not var_is_open(v, _) and open = "closed"
) and
if BaseFlow::reaches_exit(v) then exit = "exit" else exit = ""
select v.getRepresentation() + " = " + v.getDefinition().getRepresentation(), open, exit

View File

@@ -1,9 +0,0 @@
| resources_test.py:4:10:4:25 | open() | File may not be closed if an exception is raised. |
| resources_test.py:9:10:9:25 | open() | File is opened but is not closed. |
| resources_test.py:49:14:49:29 | open() | File is opened but is not closed. |
| resources_test.py:58:14:58:29 | open() | File is opened but is not closed. |
| resources_test.py:79:11:79:26 | open() | File may not be closed if an exception is raised. |
| resources_test.py:108:11:108:20 | open() | File is opened but is not closed. |
| resources_test.py:112:11:112:28 | opener_func2() | File may not be closed if an exception is raised. |
| resources_test.py:129:15:129:24 | open() | File is opened but is not closed. |
| resources_test.py:237:11:237:26 | open() | File is opened but is not closed. |

View File

@@ -1 +0,0 @@
Resources/FileNotAlwaysClosed.ql

View File

@@ -3,10 +3,10 @@
def not_close1():
f1 = open("filename")
f1.write("Error could occur")
f1.close()
f1.close() # $ notAlwaysClosed
def not_close2():
f2 = open("filename")
f2 = open("filename") # $ notAlwaysClosed
def closed3():
f3 = open("filename")
@@ -46,7 +46,7 @@ def closed7():
def not_closed8():
f8 = None
try:
f8 = open("filename")
f8 = open("filename") # $ notAlwaysClosed
f8.write("Error could occur")
finally:
if f8 is None:
@@ -55,7 +55,7 @@ def not_closed8():
def not_closed9():
f9 = None
try:
f9 = open("filename")
f9 = open("filename") # $ notAlwaysClosed
f9.write("Error could occur")
finally:
if not f9:
@@ -76,7 +76,7 @@ def closed10():
#Not closed by handling the wrong exception
def not_closed11():
f11 = open("filename")
f11 = open("filename") # $ notAlwaysClosed
try:
f11.write("IOError could occur")
f11.write("IOError could occur")
@@ -84,11 +84,11 @@ def not_closed11():
except AttributeError:
f11.close()
def doesnt_raise():
def doesnt_raise(*args):
pass
def mostly_closed12():
f12 = open("filename")
f12 = open("filename") # $ SPURIOUS:notAlwaysClosed
try:
f12.write("IOError could occur")
f12.write("IOError could occur")
@@ -105,11 +105,11 @@ def opener_func2(name):
return t1
def not_closed13(name):
f13 = open(name)
f13 = open(name) # $ notAlwaysClosed
f13.write("Hello")
def may_not_be_closed14(name):
f14 = opener_func2(name)
f14 = opener_func2(name) # $ notAlwaysClosed
f14.write("Hello")
f14.close()
@@ -126,7 +126,7 @@ def closed15():
def may_not_be_closed16(name):
try:
f16 = open(name)
f16 = open(name) # $ notAlwaysClosed
f16.write("Hello")
f16.close()
except IOError:
@@ -138,7 +138,7 @@ def may_raise():
#Not handling all exceptions, but we'll tolerate the false negative
def not_closed17():
f17 = open("filename")
f17 = open("filename") # $ notAlwaysClosed
try:
f17.write("IOError could occur")
f17.write("IOError could occur")
@@ -234,7 +234,7 @@ def closed21(path):
def not_closed22(path):
f22 = open(path, "wb")
f22 = open(path, "wb") # $ notAlwaysClosed
try:
f22.write(b"foo")
may_raise()

View File

@@ -0,0 +1,21 @@
import python
import Resources.FileNotAlwaysClosedQuery
import utils.test.InlineExpectationsTest
module MethodArgTest implements TestSig {
string getARelevantTag() { result = "notAlwaysClosed" }
predicate hasActualResult(Location location, string element, string tag, string value) {
exists(DataFlow::CfgNode f |
element = f.toString() and
location = f.getLocation() and
value = "" and
(
fileNotAlwaysClosed(f) and
tag = "notAlwaysClosed"
)
)
}
}
import MakeTest<MethodArgTest>