diff --git a/bench-moerman2018/infer.mk b/bench-moerman2018/infer.mk new file mode 100644 index 0000000000000000000000000000000000000000..8f82f54340dbe66ada28b77ffc167805d4dc0ed2 --- /dev/null +++ b/bench-moerman2018/infer.mk @@ -0,0 +1,46 @@ +INFER = infer run + +CPPFLAGS += \ + -Icommon \ + +# excludes files with recursive functions +filter-out-substring = $(foreach v,$(2),$(if $(findstring $(1),$(v)),,$(v))) +SRCS:=$(sort $(call filter-out-substring,leak,$(call filter-out-substring,recursion,$(wildcard base/*.c */*/*.c)))) + +GOOD_TARGETS:=$(foreach s,$(SRCS),$(subst /,_,$(s:%.c=%))_good.infer) +BAD_TARGETS:=$(foreach s,$(SRCS),$(subst /,_,$(s:%.c=%))_bad.infer) +TARGETS:=$(GOOD_TARGETS) $(BAD_TARGETS) + +define generate-infer-rules = + $(subst /,_,$(1:%.c=%))_good.infer: $(if $(findstring cross_file,$(1)),common/common.c,) $(1) + $(INFER) -o $$@ -- clang -DNO_BUG $(CPPFLAGS) $$^ + + $(subst /,_,$(1:%.c=%))_bad.infer: $(if $(findstring cross_file,$(1)),common/common.c,) $(1) + $(INFER) -o $$@ -- clang $(CPPFLAGS) $$^ + + $(subst /,_,$(1:%.c=%))_good.infer/eval.txt: $(subst /,_,$(1:%.c=%))_good.infer infer_evaluate_case.sh + ./infer_evaluate_case.sh good $$</bugs.txt > $$</eval.txt + + $(subst /,_,$(1:%.c=%))_bad.infer/eval.txt: $(subst /,_,$(1:%.c=%))_bad.infer infer_evaluate_case.sh + ./infer_evaluate_case.sh bad $$</bugs.txt > $$</eval.txt +endef + +$(foreach s,$(SRCS),$(eval $(call generate-infer-rules,$(s)))) + +infer_eval_sumup.txt: $(addsuffix /eval.txt, $(TARGETS)) + cat $^ > infer_eval_sumup.txt + +evaluate: infer_eval_sumup.txt +.PHONY: infer_eval_sumup.txt + +good: $(GOOD_TARGETS) + +bad: $(BAD_TARGETS) + +all: good bad + +clean: + @rm -rf *_good.infer + @rm -rf *_bad.infer + @rm -rf a.out + @rm -rf infer-out diff --git a/bench-moerman2018/infer_eval_sumup.txt b/bench-moerman2018/infer_eval_sumup.txt new file mode 100644 index 0000000000000000000000000000000000000000..f7e85daca00c2e2d5b2922bc934bf5339abc042e --- /dev/null +++ b/bench-moerman2018/infer_eval_sumup.txt @@ -0,0 +1,400 @@ +base_files_access_closed_good.infer/report.json (good): ok +base_files_double_close_good.infer/report.json (good): ok +base_general_divide_by_0_good.infer/report.json (good): ok +base_general_nullpointer_good.infer/report.json (good): ok +base_general_uninitialized_pointer_good.infer/report.json (good): ok +base_general_uninitialized_value_good.infer/report.json (good): ok +base_integers_overflow_good.infer/report.json (good): ok +base_memory_double_free_good.infer/report.json (good): ok +base_memory_read_uninitialized_malloced_mem_good.infer/report.json (good): ok +base_memory_refer_freed_good.infer/report.json (good): ok +base_memory_zero_alloc_good.infer/report.json (good): ok +base_strings_overflow_good.infer/report.json (good): ok +base_strings_unbounded_copy_good.infer/report.json (good): ok +file_operations_access_closed_01_simple_if_good.infer/report.json (good): ok +file_operations_access_closed_02_simple_if_int1_good.infer/report.json (good): ok +file_operations_access_closed_02_simple_if_int2_good.infer/report.json (good): ok +file_operations_access_closed_03_simple_if_multi_func_good.infer/report.json (good): ok +file_operations_access_closed_04_simple_switch_good.infer/report.json (good): ok +file_operations_access_closed_05_simple_goto_good.infer/report.json (good): ok +file_operations_access_closed_06_simple_pass_by_reference_good.infer/report.json (good): ok +file_operations_access_closed_07_cross_file_good.infer/report.json (good): ok +file_operations_access_closed_08_loop_for_good.infer/report.json (good): ok +file_operations_access_closed_09_loop_for_complex_good.infer/report.json (good): ok +file_operations_access_closed_10_loop_while_continue_good.infer/report.json (good): ok +file_operations_access_closed_11_loop_while_do_continue_good.infer/report.json (good): ok +file_operations_access_closed_12_loop_for_array_branching_good.infer/report.json (good): ok +file_operations_access_closed_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +file_operations_access_closed_17_complex_function_pointers_good.infer/report.json (good): ok +file_operations_access_closed_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +file_operations_access_closed_19_complex_refcount_good.infer/report.json (good): ok +file_operations_double_close_01_simple_if_good.infer/report.json (good): ok +file_operations_double_close_02_simple_if_int1_good.infer/report.json (good): ok +file_operations_double_close_02_simple_if_int2_good.infer/report.json (good): ok +file_operations_double_close_03_simple_if_multi_func_good.infer/report.json (good): ok +file_operations_double_close_04_simple_switch_good.infer/report.json (good): ok +file_operations_double_close_05_simple_goto_good.infer/report.json (good): ok +file_operations_double_close_06_simple_pass_by_reference_good.infer/report.json (good): ok +file_operations_double_close_07_cross_file_good.infer/report.json (good): ok +file_operations_double_close_08_loop_for_good.infer/report.json (good): ok +file_operations_double_close_09_loop_for_complex_good.infer/report.json (good): ok +file_operations_double_close_10_loop_while_continue_good.infer/report.json (good): ok +file_operations_double_close_11_loop_while_do_continue_good.infer/report.json (good): ok +file_operations_double_close_12_loop_for_array_branching_good.infer/report.json (good): ok +file_operations_double_close_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +file_operations_double_close_17_complex_function_pointers_good.infer/report.json (good): ok +file_operations_double_close_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +file_operations_double_close_19_complex_refcount_good.infer/report.json (good): ok +general_divide_by_zero_01_simple_if_good.infer/report.json (good): ok +general_divide_by_zero_02_simple_if_int1_good.infer/report.json (good): ok +general_divide_by_zero_02_simple_if_int2_good.infer/report.json (good): ok +general_divide_by_zero_03_simple_if_multi_func_good.infer/report.json (good): ok +general_divide_by_zero_04_simple_switch_good.infer/report.json (good): ok +general_divide_by_zero_05_simple_goto_good.infer/report.json (good): ok +general_divide_by_zero_06_simple_pass_by_reference_good.infer/report.json (good): ok +general_divide_by_zero_07_simple_cross_file_good.infer/report.json (good): ok +general_divide_by_zero_08_loop_for_good.infer/report.json (good): ok +general_divide_by_zero_09_loop_for_complex_good.infer/report.json (good): ok +general_divide_by_zero_10_loop_while_continue_good.infer/report.json (good): ok +general_divide_by_zero_11_loop_while_do_continue_good.infer/report.json (good): ok +general_divide_by_zero_12_loop_for_array_branching_good.infer/report.json (good): ok +general_divide_by_zero_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +general_divide_by_zero_17_complex_function_pointers_good.infer/report.json (good): ok +general_divide_by_zero_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +general_divide_by_zero_19_complex_refcount_good.infer/report.json (good): ok +general_nullpointer_01_simple_if_good.infer/report.json (good): ok +general_nullpointer_02_simple_if_int1_good.infer/report.json (good): ok +general_nullpointer_02_simple_if_int2_good.infer/report.json (good): ok +general_nullpointer_03_simple_if_multi_func_good.infer/report.json (good): ok +general_nullpointer_04_simple_switch_good.infer/report.json (good): ok +general_nullpointer_05_simple_goto_good.infer/report.json (good): ok +general_nullpointer_06_simple_pass_by_reference_good.infer/report.json (good): ok +general_nullpointer_07_cross_file_good.infer/report.json (good): ok +general_nullpointer_08_loop_for_good.infer/report.json (good): ok +general_nullpointer_09_loop_for_complex_good.infer/report.json (good): ok +general_nullpointer_10_loop_while_continue_good.infer/report.json (good): ok +general_nullpointer_11_loop_while_do_continue_good.infer/report.json (good): ok +general_nullpointer_12_loop_for_array_branching_good.infer/report.json (good): ok +general_nullpointer_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +general_nullpointer_17_complex_function_pointers_good.infer/report.json (good): ok +general_nullpointer_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +general_nullpointer_19_complex_refcount_good.infer/report.json (good): ok +integers_overflow_01_simple_if_good.infer/report.json (good): ok +integers_overflow_02_simple_if_int1_good.infer/report.json (good): ok +integers_overflow_02_simple_if_int2_good.infer/report.json (good): ok +integers_overflow_03_simple_if_multi_func_good.infer/report.json (good): ok +integers_overflow_04_simple_switch_good.infer/report.json (good): ok +integers_overflow_05_simple_goto_good.infer/report.json (good): ok +integers_overflow_06_simple_pass_by_reference_good.infer/report.json (good): ok +integers_overflow_07_simple_cross_file_good.infer/report.json (good): ok +integers_overflow_08_loop_for_good.infer/report.json (good): ok +integers_overflow_09_loop_for_complex_good.infer/report.json (good): ok +integers_overflow_10_loop_while_continue_good.infer/report.json (good): ok +integers_overflow_11_loop_while_do_continue_good.infer/report.json (good): ok +integers_overflow_12_loop_for_array_branching_good.infer/report.json (good): ok +integers_overflow_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +integers_overflow_17_complex_function_pointers_good.infer/report.json (good): ok +integers_overflow_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +integers_overflow_19_complex_refcount_good.infer/report.json (good): ok +memory_access_uninit_01_simple_if_good.infer/report.json (good): ok +memory_access_uninit_02_simple_if_int1_good.infer/report.json (good): ok +memory_access_uninit_02_simple_if_int2_good.infer/report.json (good): ok +memory_access_uninit_03_simple_if_multi_func_good.infer/report.json (good): ok +memory_access_uninit_04_simple_switch_good.infer/report.json (good): ok +memory_access_uninit_05_simple_goto_good.infer/report.json (good): ok +memory_access_uninit_06_simple_pass_by_reference_good.infer/report.json (good): ok +memory_access_uninit_07_simple_cross_file_good.infer/report.json (good): ok +memory_access_uninit_08_loop_for_good.infer/report.json (good): ok +memory_access_uninit_09_loop_for_complex_good.infer/report.json (good): ok +memory_access_uninit_10_loop_while_continue_good.infer/report.json (good): ok +memory_access_uninit_11_loop_while_do_continue_good.infer/report.json (good): ok +memory_access_uninit_12_loop_for_array_branching_good.infer/report.json (good): ok +memory_access_uninit_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +memory_access_uninit_17_complex_function_pointers_good.infer/report.json (good): ok +memory_access_uninit_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +memory_access_uninit_19_complex_refcount_good.infer/report.json (good): ok +memory_double_free_01_simple_if_good.infer/report.json (good): ok +memory_double_free_02_simple_if_int1_good.infer/report.json (good): ok +memory_double_free_02_simple_if_int2_good.infer/report.json (good): ok +memory_double_free_03_simple_if_multi_func_good.infer/report.json (good): ok +memory_double_free_04_simple_switch_good.infer/report.json (good): ok +memory_double_free_05_simple_goto_good.infer/report.json (good): ok +memory_double_free_06_simple_pass_by_reference_good.infer/report.json (good): ok +memory_double_free_07_cross_file_good.infer/report.json (good): ok +memory_double_free_08_loop_for_good.infer/report.json (good): ok +memory_double_free_09_loop_for_complex_good.infer/report.json (good): ok +memory_double_free_10_loop_while_continue_good.infer/report.json (good): ok +memory_double_free_11_loop_while_do_continue_good.infer/report.json (good): ok +memory_double_free_12_loop_for_array_branching_good.infer/report.json (good): ok +memory_double_free_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +memory_double_free_17_complex_function_pointers_good.infer/report.json (good): ok +memory_double_free_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +memory_double_free_19_complex_refcount_good.infer/report.json (good): ok +memory_refer_free_01_simple_if_good.infer/report.json (good): ok +memory_refer_free_02_simple_if_int1_good.infer/report.json (good): ok +memory_refer_free_02_simple_if_int2_good.infer/report.json (good): ok +memory_refer_free_03_simple_if_multi_func_good.infer/report.json (good): ok +memory_refer_free_04_simple_switch_good.infer/report.json (good): ok +memory_refer_free_05_simple_goto_good.infer/report.json (good): ok +memory_refer_free_06_simple_pass_by_reference_good.infer/report.json (good): ok +memory_refer_free_07_cross_file_good.infer/report.json (good): ok +memory_refer_free_08_loop_for_good.infer/report.json (good): ok +memory_refer_free_09_loop_for_complex_good.infer/report.json (good): ok +memory_refer_free_10_loop_while_continue_good.infer/report.json (good): ok +memory_refer_free_11_loop_while_do_continue_good.infer/report.json (good): ok +memory_refer_free_12_loop_for_array_branching_good.infer/report.json (good): ok +memory_refer_free_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +memory_refer_free_17_complex_function_pointers_good.infer/report.json (good): ok +memory_refer_free_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +memory_refer_free_19_complex_refcount_good.infer/report.json (good): ok +memory_zero_alloc_01_simple_if_good.infer/report.json (good): ok +memory_zero_alloc_02_simple_if_int1_good.infer/report.json (good): ok +memory_zero_alloc_02_simple_if_int2_good.infer/report.json (good): ok +memory_zero_alloc_03_simple_if_multi_func_good.infer/report.json (good): ok +memory_zero_alloc_04_simple_switch_good.infer/report.json (good): ok +memory_zero_alloc_05_simple_goto_good.infer/report.json (good): ok +memory_zero_alloc_06_simple_pass_by_reference_good.infer/report.json (good): ok +memory_zero_alloc_07_cross_file_good.infer/report.json (good): ok +memory_zero_alloc_08_loop_for_good.infer/report.json (good): ok +memory_zero_alloc_09_loop_for_complex_good.infer/report.json (good): ok +memory_zero_alloc_10_loop_while_continue_good.infer/report.json (good): ok +memory_zero_alloc_11_loop_while_do_continue_good.infer/report.json (good): ok +memory_zero_alloc_12_loop_for_array_branching_good.infer/report.json (good): ok +memory_zero_alloc_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +memory_zero_alloc_17_complex_function_pointers_good.infer/report.json (good): ok +memory_zero_alloc_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +memory_zero_alloc_19_complex_refcount_good.infer/report.json (good): ok +strings_overflow_01_simple_if_good.infer/report.json (good): ok +strings_overflow_02_simple_if_int1_good.infer/report.json (good): ok +strings_overflow_02_simple_if_int2_good.infer/report.json (good): ok +strings_overflow_03_simple_if_multi_func_good.infer/report.json (good): ok +strings_overflow_04_simple_switch_good.infer/report.json (good): ok +strings_overflow_05_simple_goto_good.infer/report.json (good): ok +strings_overflow_06_simple_pass_by_reference_good.infer/report.json (good): ok +strings_overflow_07_simple_cross_file_good.infer/report.json (good): ok +strings_overflow_08_loop_for_good.infer/report.json (good): ok +strings_overflow_09_loop_for_complex_good.infer/report.json (good): ok +strings_overflow_10_loop_while_continue_good.infer/report.json (good): ok +strings_overflow_11_loop_while_do_continue_good.infer/report.json (good): ok +strings_overflow_12_loop_for_array_branching_good.infer/report.json (good): ok +strings_overflow_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +strings_overflow_17_complex_function_pointers_good.infer/report.json (good): ok +strings_overflow_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +strings_overflow_19_complex_refcount_good.infer/report.json (good): ok +strings_unbounded_copy_01_simple_if_good.infer/report.json (good): ok +strings_unbounded_copy_02_simple_if_int1_good.infer/report.json (good): ok +strings_unbounded_copy_02_simple_if_int2_good.infer/report.json (good): ok +strings_unbounded_copy_03_simple_if_multi_func_good.infer/report.json (good): ok +strings_unbounded_copy_04_simple_switch_good.infer/report.json (good): ok +strings_unbounded_copy_05_simple_goto_good.infer/report.json (good): ok +strings_unbounded_copy_06_simple_pass_by_reference_good.infer/report.json (good): ok +strings_unbounded_copy_07_simple_cross_file_good.infer/report.json (good): ok +strings_unbounded_copy_08_loop_for_good.infer/report.json (good): ok +strings_unbounded_copy_09_loop_for_complex_good.infer/report.json (good): ok +strings_unbounded_copy_10_loop_while_continue_good.infer/report.json (good): ok +strings_unbounded_copy_11_loop_while_do_continue_good.infer/report.json (good): ok +strings_unbounded_copy_12_loop_for_array_branching_good.infer/report.json (good): ok +strings_unbounded_copy_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok +strings_unbounded_copy_17_complex_function_pointers_good.infer/report.json (good): ok +strings_unbounded_copy_18_complex_struct_multiple_methods_good.infer/report.json (good): ok +strings_unbounded_copy_19_complex_refcount_good.infer/report.json (good): ok +base_files_access_closed_bad.infer/report.json (bad): false negative +base_files_double_close_bad.infer/report.json (bad): false negative +base_general_divide_by_0_bad.infer/report.json (bad): false negative +base_general_nullpointer_bad.infer/report.json (bad): false negative +base_general_uninitialized_pointer_bad.infer/report.json (bad): false negative +base_general_uninitialized_value_bad.infer/report.json (bad): false negative +base_integers_overflow_bad.infer/report.json (bad): false negative +base_memory_double_free_bad.infer/report.json (bad): false negative +base_memory_read_uninitialized_malloced_mem_bad.infer/report.json (bad): false negative +base_memory_refer_freed_bad.infer/report.json (bad): false negative +base_memory_zero_alloc_bad.infer/report.json (bad): false negative +base_strings_overflow_bad.infer/report.json (bad): false negative +base_strings_unbounded_copy_bad.infer/report.json (bad): false negative +file_operations_access_closed_01_simple_if_bad.infer/report.json (bad): false negative +file_operations_access_closed_02_simple_if_int1_bad.infer/report.json (bad): false negative +file_operations_access_closed_02_simple_if_int2_bad.infer/report.json (bad): false negative +file_operations_access_closed_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +file_operations_access_closed_04_simple_switch_bad.infer/report.json (bad): false negative +file_operations_access_closed_05_simple_goto_bad.infer/report.json (bad): false negative +file_operations_access_closed_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +file_operations_access_closed_07_cross_file_bad.infer/report.json (bad): false negative +file_operations_access_closed_08_loop_for_bad.infer/report.json (bad): false negative +file_operations_access_closed_09_loop_for_complex_bad.infer/report.json (bad): false negative +file_operations_access_closed_10_loop_while_continue_bad.infer/report.json (bad): false negative +file_operations_access_closed_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +file_operations_access_closed_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +file_operations_access_closed_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +file_operations_access_closed_17_complex_function_pointers_bad.infer/report.json (bad): false negative +file_operations_access_closed_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +file_operations_access_closed_19_complex_refcount_bad.infer/report.json (bad): false negative +file_operations_double_close_01_simple_if_bad.infer/report.json (bad): false negative +file_operations_double_close_02_simple_if_int1_bad.infer/report.json (bad): false negative +file_operations_double_close_02_simple_if_int2_bad.infer/report.json (bad): false negative +file_operations_double_close_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +file_operations_double_close_04_simple_switch_bad.infer/report.json (bad): false negative +file_operations_double_close_05_simple_goto_bad.infer/report.json (bad): false negative +file_operations_double_close_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +file_operations_double_close_07_cross_file_bad.infer/report.json (bad): false negative +file_operations_double_close_08_loop_for_bad.infer/report.json (bad): false negative +file_operations_double_close_09_loop_for_complex_bad.infer/report.json (bad): false negative +file_operations_double_close_10_loop_while_continue_bad.infer/report.json (bad): false negative +file_operations_double_close_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +file_operations_double_close_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +file_operations_double_close_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +file_operations_double_close_17_complex_function_pointers_bad.infer/report.json (bad): false negative +file_operations_double_close_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +file_operations_double_close_19_complex_refcount_bad.infer/report.json (bad): false negative +general_divide_by_zero_01_simple_if_bad.infer/report.json (bad): false negative +general_divide_by_zero_02_simple_if_int1_bad.infer/report.json (bad): false negative +general_divide_by_zero_02_simple_if_int2_bad.infer/report.json (bad): false negative +general_divide_by_zero_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +general_divide_by_zero_04_simple_switch_bad.infer/report.json (bad): false negative +general_divide_by_zero_05_simple_goto_bad.infer/report.json (bad): false negative +general_divide_by_zero_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +general_divide_by_zero_07_simple_cross_file_bad.infer/report.json (bad): false negative +general_divide_by_zero_08_loop_for_bad.infer/report.json (bad): false negative +general_divide_by_zero_09_loop_for_complex_bad.infer/report.json (bad): false negative +general_divide_by_zero_10_loop_while_continue_bad.infer/report.json (bad): false negative +general_divide_by_zero_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +general_divide_by_zero_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +general_divide_by_zero_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +general_divide_by_zero_17_complex_function_pointers_bad.infer/report.json (bad): false negative +general_divide_by_zero_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +general_divide_by_zero_19_complex_refcount_bad.infer/report.json (bad): false negative +general_nullpointer_01_simple_if_bad.infer/report.json (bad): false negative +general_nullpointer_02_simple_if_int1_bad.infer/report.json (bad): false negative +general_nullpointer_02_simple_if_int2_bad.infer/report.json (bad): false negative +general_nullpointer_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +general_nullpointer_04_simple_switch_bad.infer/report.json (bad): false negative +general_nullpointer_05_simple_goto_bad.infer/report.json (bad): false negative +general_nullpointer_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +general_nullpointer_07_cross_file_bad.infer/report.json (bad): false negative +general_nullpointer_08_loop_for_bad.infer/report.json (bad): false negative +general_nullpointer_09_loop_for_complex_bad.infer/report.json (bad): false negative +general_nullpointer_10_loop_while_continue_bad.infer/report.json (bad): false negative +general_nullpointer_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +general_nullpointer_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +general_nullpointer_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +general_nullpointer_17_complex_function_pointers_bad.infer/report.json (bad): false negative +general_nullpointer_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +general_nullpointer_19_complex_refcount_bad.infer/report.json (bad): false negative +integers_overflow_01_simple_if_bad.infer/report.json (bad): false negative +integers_overflow_02_simple_if_int1_bad.infer/report.json (bad): false negative +integers_overflow_02_simple_if_int2_bad.infer/report.json (bad): false negative +integers_overflow_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +integers_overflow_04_simple_switch_bad.infer/report.json (bad): false negative +integers_overflow_05_simple_goto_bad.infer/report.json (bad): false negative +integers_overflow_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +integers_overflow_07_simple_cross_file_bad.infer/report.json (bad): false negative +integers_overflow_08_loop_for_bad.infer/report.json (bad): false negative +integers_overflow_09_loop_for_complex_bad.infer/report.json (bad): false negative +integers_overflow_10_loop_while_continue_bad.infer/report.json (bad): false negative +integers_overflow_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +integers_overflow_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +integers_overflow_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +integers_overflow_17_complex_function_pointers_bad.infer/report.json (bad): false negative +integers_overflow_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +integers_overflow_19_complex_refcount_bad.infer/report.json (bad): false negative +memory_access_uninit_01_simple_if_bad.infer/report.json (bad): false negative +memory_access_uninit_02_simple_if_int1_bad.infer/report.json (bad): false negative +memory_access_uninit_02_simple_if_int2_bad.infer/report.json (bad): false negative +memory_access_uninit_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +memory_access_uninit_04_simple_switch_bad.infer/report.json (bad): false negative +memory_access_uninit_05_simple_goto_bad.infer/report.json (bad): false negative +memory_access_uninit_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +memory_access_uninit_07_simple_cross_file_bad.infer/report.json (bad): false negative +memory_access_uninit_08_loop_for_bad.infer/report.json (bad): false negative +memory_access_uninit_09_loop_for_complex_bad.infer/report.json (bad): false negative +memory_access_uninit_10_loop_while_continue_bad.infer/report.json (bad): false negative +memory_access_uninit_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +memory_access_uninit_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +memory_access_uninit_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +memory_access_uninit_17_complex_function_pointers_bad.infer/report.json (bad): false negative +memory_access_uninit_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +memory_access_uninit_19_complex_refcount_bad.infer/report.json (bad): false negative +memory_double_free_01_simple_if_bad.infer/report.json (bad): false negative +memory_double_free_02_simple_if_int1_bad.infer/report.json (bad): false negative +memory_double_free_02_simple_if_int2_bad.infer/report.json (bad): false negative +memory_double_free_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +memory_double_free_04_simple_switch_bad.infer/report.json (bad): false negative +memory_double_free_05_simple_goto_bad.infer/report.json (bad): false negative +memory_double_free_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +memory_double_free_07_cross_file_bad.infer/report.json (bad): false negative +memory_double_free_08_loop_for_bad.infer/report.json (bad): false negative +memory_double_free_09_loop_for_complex_bad.infer/report.json (bad): false negative +memory_double_free_10_loop_while_continue_bad.infer/report.json (bad): false negative +memory_double_free_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +memory_double_free_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +memory_double_free_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +memory_double_free_17_complex_function_pointers_bad.infer/report.json (bad): false negative +memory_double_free_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +memory_double_free_19_complex_refcount_bad.infer/report.json (bad): false negative +memory_refer_free_01_simple_if_bad.infer/report.json (bad): false negative +memory_refer_free_02_simple_if_int1_bad.infer/report.json (bad): false negative +memory_refer_free_02_simple_if_int2_bad.infer/report.json (bad): false negative +memory_refer_free_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +memory_refer_free_04_simple_switch_bad.infer/report.json (bad): false negative +memory_refer_free_05_simple_goto_bad.infer/report.json (bad): false negative +memory_refer_free_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +memory_refer_free_07_cross_file_bad.infer/report.json (bad): false negative +memory_refer_free_08_loop_for_bad.infer/report.json (bad): false negative +memory_refer_free_09_loop_for_complex_bad.infer/report.json (bad): false negative +memory_refer_free_10_loop_while_continue_bad.infer/report.json (bad): false negative +memory_refer_free_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +memory_refer_free_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +memory_refer_free_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +memory_refer_free_17_complex_function_pointers_bad.infer/report.json (bad): false negative +memory_refer_free_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +memory_refer_free_19_complex_refcount_bad.infer/report.json (bad): false negative +memory_zero_alloc_01_simple_if_bad.infer/report.json (bad): false negative +memory_zero_alloc_02_simple_if_int1_bad.infer/report.json (bad): false negative +memory_zero_alloc_02_simple_if_int2_bad.infer/report.json (bad): false negative +memory_zero_alloc_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +memory_zero_alloc_04_simple_switch_bad.infer/report.json (bad): false negative +memory_zero_alloc_05_simple_goto_bad.infer/report.json (bad): false negative +memory_zero_alloc_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +memory_zero_alloc_07_cross_file_bad.infer/report.json (bad): false negative +memory_zero_alloc_08_loop_for_bad.infer/report.json (bad): false negative +memory_zero_alloc_09_loop_for_complex_bad.infer/report.json (bad): false negative +memory_zero_alloc_10_loop_while_continue_bad.infer/report.json (bad): false negative +memory_zero_alloc_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +memory_zero_alloc_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +memory_zero_alloc_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +memory_zero_alloc_17_complex_function_pointers_bad.infer/report.json (bad): false negative +memory_zero_alloc_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +memory_zero_alloc_19_complex_refcount_bad.infer/report.json (bad): false negative +strings_overflow_01_simple_if_bad.infer/report.json (bad): false negative +strings_overflow_02_simple_if_int1_bad.infer/report.json (bad): false negative +strings_overflow_02_simple_if_int2_bad.infer/report.json (bad): false negative +strings_overflow_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +strings_overflow_04_simple_switch_bad.infer/report.json (bad): false negative +strings_overflow_05_simple_goto_bad.infer/report.json (bad): false negative +strings_overflow_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +strings_overflow_07_simple_cross_file_bad.infer/report.json (bad): false negative +strings_overflow_08_loop_for_bad.infer/report.json (bad): false negative +strings_overflow_09_loop_for_complex_bad.infer/report.json (bad): false negative +strings_overflow_10_loop_while_continue_bad.infer/report.json (bad): false negative +strings_overflow_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +strings_overflow_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +strings_overflow_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +strings_overflow_17_complex_function_pointers_bad.infer/report.json (bad): false negative +strings_overflow_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +strings_overflow_19_complex_refcount_bad.infer/report.json (bad): false negative +strings_unbounded_copy_01_simple_if_bad.infer/report.json (bad): false negative +strings_unbounded_copy_02_simple_if_int1_bad.infer/report.json (bad): false negative +strings_unbounded_copy_02_simple_if_int2_bad.infer/report.json (bad): false negative +strings_unbounded_copy_03_simple_if_multi_func_bad.infer/report.json (bad): false negative +strings_unbounded_copy_04_simple_switch_bad.infer/report.json (bad): false negative +strings_unbounded_copy_05_simple_goto_bad.infer/report.json (bad): false negative +strings_unbounded_copy_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative +strings_unbounded_copy_07_simple_cross_file_bad.infer/report.json (bad): false negative +strings_unbounded_copy_08_loop_for_bad.infer/report.json (bad): false negative +strings_unbounded_copy_09_loop_for_complex_bad.infer/report.json (bad): false negative +strings_unbounded_copy_10_loop_while_continue_bad.infer/report.json (bad): false negative +strings_unbounded_copy_11_loop_while_do_continue_bad.infer/report.json (bad): false negative +strings_unbounded_copy_12_loop_for_array_branching_bad.infer/report.json (bad): false negative +strings_unbounded_copy_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative +strings_unbounded_copy_17_complex_function_pointers_bad.infer/report.json (bad): false negative +strings_unbounded_copy_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative +strings_unbounded_copy_19_complex_refcount_bad.infer/report.json (bad): false negative diff --git a/bench-moerman2018/infer_evaluate_case.sh b/bench-moerman2018/infer_evaluate_case.sh new file mode 100644 index 0000000000000000000000000000000000000000..3f119532ee48b16336551d535d386f6a52549ff4 --- /dev/null +++ b/bench-moerman2018/infer_evaluate_case.sh @@ -0,0 +1,30 @@ +#!/bin/bash -eu + +if [ $# -lt 2 ]; then + echo "usage: $0 (good|bad) path/to/bugs.txt" + exit 1 +fi + +goodbad="$1" +alarms=$(wc -l "$2" | cut -d' ' -f1) + +case $goodbad in + "good") + if [ "$alarms" -gt 1 ]; then + echo "$2 ($goodbad): imprecise" + else + echo "$2 ($goodbad): ok" + fi + ;; + "bad") + if [ "$alarms" -lt 2 ]; then + echo "$2 ($goodbad): false negative" + else + echo "$2 ($goodbad): ok" + fi + ;; + *) + echo "invalid '$goodbad': must be either 'good' or 'bad'." + exit 1 +esac +