Skip to content

Commit 16f2cd1

Browse files
authored
Merge pull request diffblue#273 from diffblue/smowton/fix/end_to_end_tests
SEC-144: Add a variety of end-to-end security analyser tests, and fix several bugs exposed by them
2 parents 8e88c89 + 4ccc7bd commit 16f2cd1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+925
-323
lines changed

cbmc/src/util/irep_ids.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,7 @@ IREP_ID_ONE(havoc_object)
845845
IREP_ID_TWO(overflow_shl, overflow-shl)
846846
IREP_ID_ONE(lvsa_evs_type)
847847
IREP_ID_ONE(is_initializer)
848+
IREP_ID_TWO(C_is_taint_wrapper_type, #is_taint_wrapper_type)
848849

849850
#undef IREP_ID_ONE
850851
#undef IREP_ID_TWO

regression/end_to_end/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Ensure Ant build directories are ignored below here:
2+
build/
3+
dist/

regression/end_to_end/driver.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ def working_dir(new_dir):
1818
@contextlib.contextmanager
1919
def temp_dir_deleter(dirname):
2020
yield
21+
if "SECURITY_ANALYSER_END_TO_END_TESTS_KEEP_RESULTS" in os.environ:
22+
return
2123
try:
2224
shutil.rmtree(dirname)
2325
except:
@@ -51,8 +53,9 @@ def trace_exists(self, function, line_no):
5153
return False
5254

5355
def run_security_analyser_pipeline(
54-
relative_jar_path,
56+
relative_binary_path,
5557
relative_rules_path,
58+
base_path,
5659
extra_args = []):
5760

5861
regression_tests_path = os.getcwd()
@@ -61,22 +64,24 @@ def run_security_analyser_pipeline(
6164
raise Exception("Set SECURITY_SCANNER_HOME to a path containing the 'security-analyzer' binary")
6265
pipeline_driver_path = \
6366
os.path.realpath(os.path.join(regression_tests_path, "..", "driver", "run.py"))
64-
absolute_jar_path = \
65-
os.path.join(regression_tests_path, "end_to_end", relative_jar_path)
67+
absolute_binary_path = \
68+
os.path.join(base_path, relative_binary_path)
6669
absolute_rules_path = \
67-
os.path.join(regression_tests_path, "end_to_end", relative_rules_path)
70+
os.path.join(base_path, relative_rules_path)
6871

6972
results_dir = tempfile.mkdtemp()
7073
temporary_dir = tempfile.mkdtemp()
7174

7275
cmdline = ["python", pipeline_driver_path,
7376
"-C", absolute_rules_path,
74-
"-I", absolute_jar_path,
77+
"-I", absolute_binary_path,
7578
"-R", results_dir,
7679
"-T", temporary_dir,
77-
"--name", relative_jar_path,
78-
"--verbosity", "0"]
80+
"--name", relative_binary_path,
81+
"--verbosity", "9"]
7982
cmdline.extend(extra_args)
83+
if "SECURITY_ANALYSER_END_TO_END_TESTS_EXTRA_ARGS" in os.environ:
84+
cmdline.extend(os.environ["SECURITY_ANALYSER_END_TO_END_TESTS_EXTRA_ARGS"].split(","))
8085

8186
with working_dir(analyzer_home), \
8287
temp_dir_deleter(results_dir), \
@@ -106,4 +111,7 @@ def run_security_analyser_pipeline(
106111
trace_json = json.load(trace_file)
107112
inline_traces.append(trace_json)
108113

114+
if "SECURITY_ANALYSER_END_TO_END_TESTS_KEEP_RESULTS" in os.environ:
115+
print("Test %s kept results (%s) and temporary directory (%s)" % (cmdline, results_dir, temporary_dir))
116+
109117
return ErrorTraces(traces)

regression/end_to_end/general001/test_general001.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22
from regression.end_to_end.driver \
33
import run_security_analyser_pipeline
44

5+
import os
6+
57
def test_general001():
68
traces = run_security_analyser_pipeline(
7-
"general001/taint_traces_01.jar",
8-
"general001/taint_traces_01_rules.json")
9+
"taint_traces_01.jar",
10+
"taint_traces_01_rules.json",
11+
os.path.realpath(os.path.dirname(__file__)))
912
assert traces.count_traces() > 0
1013
assert traces.trace_exists("java::Main.bug:(I)V", 84)

regression/end_to_end/general002/test_general002.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
from regression.end_to_end.driver \
33
import run_security_analyser_pipeline
44

5+
import os
6+
57
def test_general002():
68
traces = run_security_analyser_pipeline(
7-
"general002/taint_traces_02.jar",
8-
"general002/taint_traces_02_rules.json")
9+
"taint_traces_02.jar",
10+
"taint_traces_02_rules.json",
11+
os.path.realpath(os.path.dirname(__file__)))
912
assert traces.count_traces() == 0

regression/end_to_end/general003/test_general003.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
from regression.end_to_end.driver \
33
import run_security_analyser_pipeline
44

5+
import os
6+
57
def test_general003():
68
traces = run_security_analyser_pipeline(
7-
"general003/taint_traces_03.jar",
8-
"general003/taint_traces_03_rules.json")
9+
"taint_traces_03.jar",
10+
"taint_traces_03_rules.json",
11+
os.path.realpath(os.path.dirname(__file__)))
912
assert traces.count_traces() == 0

regression/end_to_end/general004/test_general004.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22
from regression.end_to_end.driver \
33
import run_security_analyser_pipeline
44

5+
import os
6+
57
def test_general004():
68
traces = run_security_analyser_pipeline(
7-
"general004/taint_traces_04.jar",
8-
"general004/taint_traces_04_rules.json")
9+
"taint_traces_04.jar",
10+
"taint_traces_04_rules.json",
11+
os.path.realpath(os.path.dirname(__file__)))
912
assert traces.count_traces() > 0
1013
assert traces.trace_exists("java::Main.baz0:()V", 19)
1114
assert traces.trace_exists("java::Main.baz1:()V", 26)

regression/end_to_end/general005/test_general005.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22
from regression.end_to_end.driver \
33
import run_security_analyser_pipeline
44

5+
import os
6+
57
def test_general005():
68
traces = run_security_analyser_pipeline(
7-
"general005/taint_traces_05.jar",
8-
"general005/taint_traces_05_rules.json",
9+
"taint_traces_05.jar",
10+
"taint_traces_05_rules.json",
11+
os.path.realpath(os.path.dirname(__file__)),
912
["--data-flow-insensitive-instrumentation"])
1013
assert traces.count_traces() > 0
1114
assert traces.trace_exists("java::DummyAssignmentSubmissionEdit.setSubmittedText:(Ljava/lang/String;)V", 3)

regression/end_to_end/general006/test_general006.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22
from regression.end_to_end.driver \
33
import run_security_analyser_pipeline
44

5+
import os
6+
57
def test_general006():
68
traces = run_security_analyser_pipeline(
7-
"general006/taint_traces_06.jar",
8-
"general006/taint_traces_06_rules.json",
9+
"taint_traces_06.jar",
10+
"taint_traces_06_rules.json",
11+
os.path.realpath(os.path.dirname(__file__)),
912
["--data-flow-insensitive-instrumentation"])
1013
assert traces.count_traces() > 0
1114
assert traces.trace_exists("java::taint_test.test.doGet:(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V", 165)

regression/end_to_end/general007/test_general007.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22
from regression.end_to_end.driver \
33
import run_security_analyser_pipeline
44

5+
import os
6+
57
def test_general007():
68
traces = run_security_analyser_pipeline(
7-
"general007/taint_traces_07.jar",
8-
"general007/taint_traces_07_rules.json")
9+
"taint_traces_07.jar",
10+
"taint_traces_07_rules.json",
11+
os.path.realpath(os.path.dirname(__file__)))
912
assert traces.count_traces() > 0
1013
assert traces.trace_exists("java::training07.test.doGet:(Ltraining07/HttpServletRequest;Ltraining07/HttpServletResponse;)V", 109)

0 commit comments

Comments
 (0)