Skip to content

Commit fbd9318

Browse files
authored
Merge pull request diffblue#362 from diffblue/refined_statistics_of_the_stage_1
Refined statistics of the Phase 1 of the tool.
2 parents e7fd0e9 + fc8fe74 commit fbd9318

8 files changed

+194
-61
lines changed

driver/analyser.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,14 @@ def run_security_analyser(
9292
get_security_analyser_pathname() + " "
9393
"--security-scanner '" + root_config_json_fname + "' "
9494
)
95-
prof["calling_goto_analyser"] = {}
96-
prof_calling_goto_analyser_start_time = time.time()
95+
prof["calling_security_analyser"] = {}
96+
prof_calling_security_analyser_start_time = time.time()
9797
print("Invoking 'security-analyser' ...")
9898
if verbosity >= 9:
9999
print("CWD: " + results_dir)
100100
print("CMD: " + command)
101101
os.system(command)
102-
prof["calling_goto_analyser"]["duration"] = time.time() - prof_calling_goto_analyser_start_time
102+
prof["calling_security_analyser"]["duration"] = time.time() - prof_calling_security_analyser_start_time
103103
os.chdir(old_cwd)
104104
prof["duration"] = time.time() - prof_start_time
105105

driver/run.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def evaluate(cmdline, common_libraries):
185185
cmdline.verbosity
186186
)
187187

188-
prof["run_analyser"] = analyser.run_security_analyser(
188+
prof["summary_computation"] = analyser.run_security_analyser(
189189
classes_jar_pathname,
190190
cmdline.config,
191191
cmdline.timeout,
@@ -231,7 +231,7 @@ def evaluate(cmdline, common_libraries):
231231
prof_plots = {}
232232
prof_plots_start_time = time.time()
233233

234-
stats_json_fname = os.path.abspath(os.path.join(cmdline.results_dir,"statistics/JSON/statistics.json"))
234+
stats_json_fname = os.path.abspath(os.path.join(cmdline.results_dir,"statistics/JSON/statistics_security_analyser.json"))
235235
stats_plots_dir = os.path.abspath(os.path.join(cmdline.results_dir,"statistics/plots"))
236236

237237
prof_plots["source"] = stats_json_fname
@@ -242,11 +242,13 @@ def evaluate(cmdline, common_libraries):
242242
prof_plots["duration"] = time.time() - prof_plots_start_time
243243
prof["plots_build"] = prof_plots
244244

245-
overall_perf_fname = os.path.abspath(os.path.join(cmdline.results_dir,"overall_performance.json"))
246-
print("Saving performance data in JSON format to: " + overall_perf_fname)
247-
248245
prof["duration"] = time.time() - prof_start_time
249246

247+
overall_perf_fname = os.path.abspath(os.path.join(cmdline.results_dir, "statistics", "JSON", "overall_performance.json"))
248+
if not os.path.exists(os.path.dirname(overall_perf_fname)):
249+
os.makedirs(os.path.dirname(overall_perf_fname))
250+
print("Saving performance data in JSON format to: " + overall_perf_fname)
251+
250252
with open(overall_perf_fname,"w") as overall_perf_file:
251253
overall_perf_file.write(json.dumps(prof,sort_keys=True,indent=4))
252254

src/taint-analysis/taint_security_scanner.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -258,15 +258,19 @@ bool taint_do_security_scan(
258258
<< (summaries_root / "JSON" / "__index.json").native()
259259
<< "')." << messaget::eom;
260260

261+
statistics.begin_dump_of_taint_json_summaries();
261262
taint_summaries.flush();
263+
statistics.end_dump_of_taint_json_summaries();
262264

263265
logger.status()
264266
<< "Saving summaries of LVSA analysis in JSON format (see '"
265267
<< (boost::filesystem::path(config.get_lvsa_summaries_root_directory()) /
266268
"__index.json").native()
267269
<< "')." << messaget::eom;
268270

271+
statistics.begin_dump_of_lvsa_json_summaries();
269272
lvsa_summaries.flush();
273+
statistics.end_dump_of_lvsa_json_summaries();
270274

271275
const boost::filesystem::path stats_directory(
272276
config.get_statistics_root_directory());
@@ -284,17 +288,14 @@ bool taint_do_security_scan(
284288
}
285289

286290
const auto json_directory = stats_directory / "JSON";
287-
const auto json_stats_file = json_directory / "statistics.json";
291+
const auto json_stats_file =
292+
json_directory / "statistics_security_analyser.json";
288293

289294
logger.status()
290295
<< "Saving statistics of the whole analysis in JSON format (see '"
291296
<< json_stats_file.native()
292297
<< "')." << messaget::eom;
293-
{
294-
boost::filesystem::create_directory(json_directory);
295-
std::ofstream ostr(json_stats_file.native());
296-
taint_dump_statistics_in_JSON(statistics, ostr);
297-
}
298+
taint_dump_statistics_in_JSON(statistics, json_stats_file);
298299

299300
if(config.is_html_dump_of_program_enabled())
300301
{

src/taint-analysis/taint_statistics.cpp

Lines changed: 101 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -146,45 +146,40 @@ static bool is_instruction_virtual_dispatch(
146146
///
147147
///////////////////////////////////////////////////////////////////
148148

149-
150149
taint_function_statisticst::taint_function_statisticst(
151-
std::size_t const num_locations_)
152-
: num_locations(num_locations_)
153-
, num_declarations(0UL)
154-
, num_temporaries(0UL)
155-
, num_assignments_to_temporaries(0UL)
156-
, num_dead_statements(0UL)
157-
, num_NONDET_calls(0UL)
158-
, num_SKIPs(0UL)
159-
, num_GOTOs(0UL)
160-
, num_string_builder_lines(0UL)
161-
, num_virtual_dispatches(0UL)
162-
, num_auxiliary_locations(0UL)
163-
164-
, sources()
165-
, sinks()
166-
, sanitisers()
167-
168-
, time_point_begin_lvsa_analysis()
169-
, time_point_end_lvsa_analysis()
170-
, num_fixpoint_steps_of_lvsa_analysis(0UL)
171-
172-
, num_lvsa_uses_of_callee_summaries(0UL)
173-
, num_lvsa_of_processed_rules_callee_summaries(0UL)
174-
175-
, time_point_begin_taint_summaries()
176-
, time_point_end_taint_summaries()
177-
, num_fixpoint_steps_of_taint_summaries(0UL)
178-
179-
, summary_input_size(0UL)
180-
, summary_output_size(0UL)
181-
, summary_domain_size(0UL)
182-
, summary_domain_num_abstract_values(0UL)
183-
184-
, num_usages_of_my_summary(0UL)
185-
186-
, num_usages_of_callee_summaries(0UL)
187-
, num_rules_in_used_callee_summaries(0UL)
150+
const std::size_t num_locations_)
151+
: num_locations(num_locations_),
152+
num_declarations(0UL),
153+
num_temporaries(0UL),
154+
num_assignments_to_temporaries(0UL),
155+
num_dead_statements(0UL),
156+
num_NONDET_calls(0UL),
157+
num_SKIPs(0UL),
158+
num_GOTOs(0UL),
159+
num_string_builder_lines(0UL),
160+
num_virtual_dispatches(0UL),
161+
num_auxiliary_locations(0UL),
162+
sources(),
163+
sinks(),
164+
sanitisers(),
165+
num_applications_of_rule_propagation(0UL),
166+
num_applications_of_rule_sanitize(0UL),
167+
num_applications_of_rule_sink(0UL),
168+
time_point_begin_lvsa_analysis(),
169+
time_point_end_lvsa_analysis(),
170+
num_fixpoint_steps_of_lvsa_analysis(0UL),
171+
num_lvsa_uses_of_callee_summaries(0UL),
172+
num_lvsa_of_processed_rules_callee_summaries(0UL),
173+
time_point_begin_taint_summaries(),
174+
time_point_end_taint_summaries(),
175+
num_fixpoint_steps_of_taint_summaries(0UL),
176+
summary_input_size(0UL),
177+
summary_output_size(0UL),
178+
summary_domain_size(0UL),
179+
summary_domain_num_abstract_values(0UL),
180+
num_usages_of_my_summary(0UL),
181+
num_usages_of_callee_summaries(0UL),
182+
num_rules_in_used_callee_summaries(0UL)
188183
{}
189184

190185
///////////////////////////////////////////////////////////////////
@@ -264,6 +259,24 @@ void taint_function_statisticst::on_get_may(unsigned int const location)
264259
sinks.insert(location);
265260
}
266261

262+
void taint_function_statisticst::on_application_of_propagation_rule(
263+
const std::size_t rule_id)
264+
{
265+
++num_applications_of_rule_propagation;
266+
}
267+
268+
void taint_function_statisticst::on_application_of_sanitization_rule(
269+
const std::size_t rule_id)
270+
{
271+
++num_applications_of_rule_sanitize;
272+
}
273+
274+
void taint_function_statisticst::on_application_of_sink_rule(
275+
const std::size_t rule_id)
276+
{
277+
++num_applications_of_rule_sink;
278+
}
279+
267280
///////////////////////////////////////////////////////////////////
268281
/// Queries
269282
///////////////////////////////////////////////////////////////////
@@ -534,6 +547,38 @@ void taint_statisticst::on_taint_analysis_use_callee_summary(
534547
statistics_of_functions.at(callee_name).on_taint_analysis_use_my_summary();
535548
}
536549

550+
void taint_statisticst::on_taint_analysis_apply_propagation_rule(
551+
const std::size_t rule_id,
552+
const unsigned int location_number)
553+
{
554+
PRECONDITION(!current_function_name.empty());
555+
const auto it = statistics_of_functions.find(current_function_name);
556+
PRECONDITION(it != statistics_of_functions.cend());
557+
it->second.on_set_may(location_number);
558+
it->second.on_application_of_propagation_rule(rule_id);
559+
}
560+
561+
void taint_statisticst::on_taint_analysis_apply_sanitize_rule(
562+
const std::size_t rule_id,
563+
const unsigned int location_number)
564+
{
565+
PRECONDITION(!current_function_name.empty());
566+
const auto it = statistics_of_functions.find(current_function_name);
567+
PRECONDITION(it != statistics_of_functions.cend());
568+
it->second.on_clear_may(location_number);
569+
it->second.on_application_of_sanitization_rule(rule_id);
570+
}
571+
572+
void taint_statisticst::on_taint_analysis_apply_sink_rule(
573+
const std::size_t rule_id,
574+
const unsigned int location_number)
575+
{
576+
PRECONDITION(!current_function_name.empty());
577+
const auto it = statistics_of_functions.find(current_function_name);
578+
PRECONDITION(it != statistics_of_functions.cend());
579+
it->second.on_get_may(location_number);
580+
it->second.on_application_of_sink_rule(rule_id);
581+
}
537582

538583
void taint_statisticst::begin_error_traces_recognition()
539584
{
@@ -565,6 +610,16 @@ void taint_statisticst::end_dump_of_taint_json_summaries()
565610
time_point_end_dump_taint_json_summaries = get_current_time();
566611
}
567612

613+
void taint_statisticst::begin_dump_of_lvsa_json_summaries()
614+
{
615+
time_point_begin_dump_lvsa_json_summaries = get_current_time();
616+
}
617+
618+
void taint_statisticst::end_dump_of_lvsa_json_summaries()
619+
{
620+
time_point_end_dump_lvsa_json_summaries = get_current_time();
621+
}
622+
568623
void taint_statisticst::begin_dump_of_taint_html_traces()
569624
{
570625
time_point_begin_dump_taint_html_traces = get_current_time();
@@ -640,6 +695,14 @@ taint_statisticst::get_duration_of_dump_of_taint_json_summaries() const
640695
time_point_end_dump_taint_json_summaries);
641696
}
642697

698+
taint_statisticst::durationt
699+
taint_statisticst::get_duration_of_dump_of_lvsa_json_summaries() const
700+
{
701+
return get_duration(
702+
time_point_begin_dump_lvsa_json_summaries,
703+
time_point_end_dump_lvsa_json_summaries);
704+
}
705+
643706
taint_statisticst::durationt
644707
taint_statisticst::get_duration_of_dump_of_taint_html_traces() const
645708
{

src/taint-analysis/taint_statistics.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ class taint_function_statisticst
6868
void on_clear_may(const unsigned int location);
6969
void on_get_may(const unsigned int location);
7070

71+
void on_application_of_propagation_rule(const std::size_t rule_id);
72+
void on_application_of_sanitization_rule(const std::size_t rule_id);
73+
void on_application_of_sink_rule(const std::size_t rule_id);
74+
7175
///////////////////////////////////////////////////////////////////
7276
/// Queries
7377
///////////////////////////////////////////////////////////////////
@@ -102,6 +106,19 @@ class taint_function_statisticst
102106
const std::set<unsigned int>
103107
&get_locations_of_taint_sanitisers() const noexcept { return sanitisers; }
104108

109+
std::size_t get_num_applications_of_rule_propagation() const
110+
{
111+
return num_applications_of_rule_propagation;
112+
}
113+
std::size_t get_num_applications_of_rule_sanitizer() const
114+
{
115+
return num_applications_of_rule_sanitize;
116+
}
117+
std::size_t get_num_applications_of_rule_sink() const
118+
{
119+
return num_applications_of_rule_sink;
120+
}
121+
105122
durationt get_duration_of_lvsa_analysis() const;
106123
durationt get_duration_of_taint_summaries() const;
107124

@@ -151,6 +168,10 @@ class taint_function_statisticst
151168
std::set<unsigned int> sinks;
152169
std::set<unsigned int> sanitisers;
153170

171+
std::size_t num_applications_of_rule_propagation;
172+
std::size_t num_applications_of_rule_sanitize;
173+
std::size_t num_applications_of_rule_sink;
174+
154175
time_pointt time_point_begin_lvsa_analysis;
155176
time_pointt time_point_end_lvsa_analysis;
156177
std::size_t num_fixpoint_steps_of_lvsa_analysis;
@@ -227,6 +248,16 @@ class taint_statisticst
227248
const std::shared_ptr<taint_summaryt> summary,
228249
const std::string &callee_name);
229250

251+
void on_taint_analysis_apply_propagation_rule(
252+
const std::size_t rule_id,
253+
const unsigned int location_number);
254+
void on_taint_analysis_apply_sanitize_rule(
255+
const std::size_t rule_id,
256+
const unsigned int location_number);
257+
void on_taint_analysis_apply_sink_rule(
258+
const std::size_t rule_id,
259+
const unsigned int location_number);
260+
230261
void begin_error_traces_recognition();
231262
void end_error_traces_recognition();
232263

@@ -236,6 +267,9 @@ class taint_statisticst
236267
void begin_dump_of_taint_json_summaries();
237268
void end_dump_of_taint_json_summaries();
238269

270+
void begin_dump_of_lvsa_json_summaries();
271+
void end_dump_of_lvsa_json_summaries();
272+
239273
void begin_dump_of_taint_html_traces();
240274
void end_dump_of_taint_html_traces();
241275

@@ -253,6 +287,7 @@ class taint_statisticst
253287
durationt get_duration_of_error_traces_recognition() const;
254288
durationt get_duration_of_dump_of_taint_html_summaries() const;
255289
durationt get_duration_of_dump_of_taint_json_summaries() const;
290+
durationt get_duration_of_dump_of_lvsa_json_summaries() const;
256291
durationt get_duration_of_dump_of_taint_html_traces() const;
257292
durationt get_duration_of_dump_of_taint_json_traces() const;
258293

@@ -295,6 +330,9 @@ class taint_statisticst
295330
time_pointt time_point_begin_dump_taint_json_summaries;
296331
time_pointt time_point_end_dump_taint_json_summaries;
297332

333+
time_pointt time_point_begin_dump_lvsa_json_summaries;
334+
time_pointt time_point_end_dump_lvsa_json_summaries;
335+
298336
time_pointt time_point_begin_dump_taint_html_traces;
299337
time_pointt time_point_end_dump_taint_html_traces;
300338

src/taint-analysis/taint_statistics_dump.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,8 @@ void taint_dump_statistics_in_JSON(
2121
const taint_statisticst &S,
2222
std::ostream &ostr);
2323

24+
void taint_dump_statistics_in_JSON(
25+
const taint_statisticst &S,
26+
const boost::filesystem::path &out_file_pathname);
27+
2428
#endif

0 commit comments

Comments
 (0)