diff --git a/Makefile b/Makefile
index 1aa2ecf44..c7b3b07fd 100644
--- a/Makefile
+++ b/Makefile
@@ -6,14 +6,15 @@
# of patent rights can be found in the PATENTS file in the same directory.
ROOT_DIR = .
--include $(ROOT_DIR)/Makefile.config
+include $(ROOT_DIR)/Makefile.config
ifeq ($(IS_FACEBOOK_TREE),yes)
-# With this makefile, all targets will default to have right env variables
-# pointing to the sandbox
- -include $(ROOT_DIR)/facebook//Makefile.env
+# With this makefile, all targets will default to have right env variables pointing to the sandbox
+ include $(ROOT_DIR)/facebook//Makefile.env
endif
+BUILD_SYSTEMS_TESTS = ant
+
DIRECT_TESTS=
ifeq ($(BUILD_C_ANALYZERS),yes)
DIRECT_TESTS += c_errors_test c_frontend_test cpp_checkers_test cpp_errors_test cpp_frontend_test cpp_quandary_test
@@ -104,10 +105,6 @@ endif
.PHONY: test_oss_build
test_oss_build: clang_plugin
-# make sure we don't break the opensource build
-ifeq ($(IS_FACEBOOK_TREE),yes)
- $(MAKE) -C facebook clean
-endif
$(MAKE) -C $(SRC_DIR) EXTRA_DEPS=opensource TEST_BUILD_DIR=$(BUILD_DIR)/opensource test_build
.PHONY: test_build
@@ -127,9 +124,9 @@ frontend_replace: $(DIRECT_TESTS_REPLACE)
define gen_direct_test_rule
.PHONY: $(1)
-$(1):
+$(1): infer
$(MAKE) -C \
- infer/tests/codetoanalyze/$(shell printf $(1) | cut -f 1 -d _)/$(shell printf $(1) | cut -f 2 -d _) \
+ $(INFER_DIR)/tests/codetoanalyze/$(shell printf $(1) | cut -f 1 -d _)/$(shell printf $(1) | cut -f 2 -d _) \
$(shell printf $(1) | cut -f 3 -d _)
endef
@@ -138,19 +135,22 @@ $(foreach test,$(DIRECT_TESTS) $(DIRECT_TESTS_REPLACE),\
$(call gen_direct_test_rule,$(test))))
.PHONY: direct_tests
-direct_tests:
- $(MAKE) -j $(NCPU) -l $(NCPU) $(DIRECT_TESTS)
+direct_tests: $(DIRECT_TESTS)
-.PHONY: buck_test
-buck_test: infer
- $(MAKE) direct_tests
- NO_BUCKD=1 ./infer/tests/build_systems/build_integration_tests.py
+define gen_build_system_test_rule
+.PHONY: $(1)_test
+build_$(1)_test: infer
+ $(MAKE) -C $(INFER_DIR)/tests/build_systems/$(1) test
+endef
-.PHONY: buck_test_xml
-buck_test_xml: infer
- $(MAKE) direct_tests
- buck test --xml test.xml # TODO: generate test.xml with test results
- NO_BUCKD=1 ./infer/tests/build_systems/build_integration_tests.py
+$(foreach test,$(BUILD_SYSTEMS_TESTS), $(eval $(call gen_build_system_test_rule,$(test))))
+
+.PHONY: build_systems_tests
+build_systems_tests: infer $(foreach test,$(BUILD_SYSTEMS_TESTS),build_$(test)_test)
+ NO_BUCKD=1 $(INFER_DIR)/tests/build_systems/build_integration_tests.py
+
+.PHONY: buck_test
+buck_test: direct_tests build_systems_tests
.PHONY: inferTraceBugs_test
inferTraceBugs_test: infer
@@ -170,7 +170,7 @@ inferTraceBugs_test: infer
.PHONY: check_missing_mli
check_missing_mli:
- @for x in $$(find infer/src -name "*.ml" -or -name "*.re"); do \
+ @for x in $$(find $(INFER_DIR)/src -name "*.ml" -or -name "*.re"); do \
test -f "$$x"i || echo Missing "$$x"i; done
.PHONY: toplevel
@@ -179,24 +179,20 @@ toplevel: infer
.PHONY: inferScriptMode_test
inferScriptMode_test: toplevel
- INFER_REPL_BINARY=ocaml ./scripts/infer_repl ./infer/tests/repl/infer_batch_script.ml
+ INFER_REPL_BINARY=ocaml $(SCRIPT_DIR)/infer_repl $(INFER_DIR)/tests/repl/infer_batch_script.ml
.PHONY: test
test: test_build ocaml_unit_test buck_test inferTraceBugs_test inferScriptMode_test
$(MAKE) -C $(SRC_DIR) mod_dep.dot
-.PHONY: test_xml
-test_xml: test_build ocaml_unit_test buck_test_xml inferTraceBugs_test
- $(MAKE) -C $(SRC_DIR) mod_dep.dot
-
.PHONY: quick-test
quick-test: test_this_build ocaml_unit_test
.PHONY: test-replace
test-replace:
- @for file in $$(find infer/tests -name "*.exp.test"); do \
+ @for file in $$(find $(INFER_DIR)/tests -name "*.exp.test"); do \
mv -f $$file $$(dirname $$file)/$$(basename -s .exp.test $$file).exp; done
- @for file in $$(find infer/tests -name "*.test.dot"); do \
+ @for file in $$(find $(INFER_DIR)/tests -name "*.test.dot"); do \
mv -f $$file $$(dirname $$file)/$$(basename -s .test.dot $$file).dot; done
.PHONY: uninstall
@@ -313,7 +309,6 @@ endif
.PHONY: clean
clean:
- $(REMOVE) test.xml
ifeq ($(IS_RELEASE_TREE),no)
ifeq ($(BUILD_C_ANALYZERS),yes)
$(MAKE) -C $(FCP_DIR) clean
@@ -329,12 +324,12 @@ ifeq ($(IS_FACEBOOK_TREE),yes)
$(MAKE) -C facebook clean
endif
$(MAKE) -C $(DEPENDENCIES_DIR)/ocamldot clean
- find infer/tests -name '*.o' -or -name '*.o.sh' -delete
+ find $(INFER_DIR)/tests -name '*.o' -or -name '*.o.sh' -delete
.PHONY: conf-clean
conf-clean: clean
- $(REMOVE) infer/lib/python/inferlib/*.pyc
- $(REMOVE) infer/lib/python/inferlib/*/*.pyc
+ $(REMOVE) $(PYTHON_DIR)/inferlib/*.pyc
+ $(REMOVE) $(PYTHON_DIR)/inferlib/*/*.pyc
$(REMOVE) .buckversion
$(REMOVE) Makefile.config
$(REMOVE) acinclude.m4
@@ -343,10 +338,10 @@ conf-clean: clean
$(REMOVE) config.log
$(REMOVE) config.status
$(REMOVE) configure
- $(REMOVE_DIR) infer/models/c/out/
- $(REMOVE_DIR) infer/models/cpp/out/
- $(REMOVE_DIR) infer/models/java/infer-out/
- $(REMOVE_DIR) infer/models/objc/out/
+ $(REMOVE_DIR) $(MODELS_DIR)/c/out/
+ $(REMOVE_DIR) $(MODELS_DIR)/cpp/out/
+ $(REMOVE_DIR) $(MODELS_DIR)/java/infer-out/
+ $(REMOVE_DIR) $(MODELS_DIR)/objc/out/
# print any variable for Makefile debugging
print-%:
diff --git a/infer/tests/build.xml b/infer/tests/build.xml
deleted file mode 100644
index ea55d3672..000000000
--- a/infer/tests/build.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/infer/tests/build_systems/ant/.inferconfig b/infer/tests/build_systems/ant/.inferconfig
new file mode 100644
index 000000000..72a3f0d9f
--- /dev/null
+++ b/infer/tests/build_systems/ant/.inferconfig
@@ -0,0 +1,8 @@
+{
+ "skip_translation": [
+ {
+ "language": "Java",
+ "source_contains": "_SHOULD_BE_SKIPPED_"
+ }
+ ]
+}
diff --git a/infer/tests/build_systems/ant/Makefile b/infer/tests/build_systems/ant/Makefile
new file mode 100644
index 000000000..53c380a96
--- /dev/null
+++ b/infer/tests/build_systems/ant/Makefile
@@ -0,0 +1,47 @@
+# Copyright (c) 2016 - present Facebook, Inc.
+# All rights reserved.
+#
+# This source code is licensed under the BSD style license found in the
+# LICENSE file in the root directory of this source tree. An additional grant
+# of patent rights can be found in the PATENTS file in the same directory.
+
+ANALYZER = infer
+ROOT_DIR = ../../../..
+
+include $(ROOT_DIR)/Makefile.config
+
+default: compile
+
+JAVA_SOURCE_FILES = $(wildcard src/infer/*.java)
+JAVA_CLASS_FILES = $(patsubst %.java,ant_out/%.class,$(JAVA_SOURCE_FILES))
+
+INFERPRINT_OPTIONS = --issues-tests
+
+$(JAVA_CLASS_FILES): $(JAVA_SOURCE_FILES)
+ ant
+
+infer-out/report.json: $(INFER_BIN) $(JAVA_SOURCE_FILES)
+ $(call silent_on_success,\
+ $(INFER_BIN) -a $(ANALYZER) -- ant)
+
+issues.exp.test: $(INFERPRINT_BIN) infer-out/report.json
+ $(INFERPRINT_BIN) -q -a $(ANALYZER) $(INFERPRINT_OPTIONS) issues.exp.test
+ LC_ALL=C sort -t: -k1,1 -k2n,2 -o issues.exp.test issues.exp.test
+
+.PHONY: compile
+compile: $(JAVA_CLASS_FILES)
+
+.PHONY: analyze
+analyze: infer-out/report.json
+
+.PHONY: print
+print: issues.exp.test
+
+.PHONY: test
+test: issues.exp.test
+ diff -u issues.exp issues.exp.test
+
+.PHONY: clean
+clean:
+ ant clean
+ rm -rf issues.exp.test infer-out
diff --git a/infer/tests/build_systems/ant/build.xml b/infer/tests/build_systems/ant/build.xml
new file mode 100644
index 000000000..2a3f9c1f6
--- /dev/null
+++ b/infer/tests/build_systems/ant/build.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/infer/tests/build_systems/ant/issues.exp b/infer/tests/build_systems/ant/issues.exp
new file mode 100644
index 000000000..5faf3c7b1
--- /dev/null
+++ b/infer/tests/build_systems/ant/issues.exp
@@ -0,0 +1,253 @@
+src/infer/AnalysisStops.java, void AnalysisStops.accessPathInCalleeMayCauseFalseNegative(), 3, NULL_DEREFERENCE
+src/infer/AnalysisStops.java, void AnalysisStops.callOnCastUndefinedObjMayCauseFalseNegative(), 3, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.callOnUndefinedObjMayCauseFalseNegative(), 2, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.castFailureOnUndefinedObjMayCauseFalseNegative(), 1, RETURN_VALUE_IGNORED
+src/infer/AnalysisStops.java, void AnalysisStops.castFailureOnUndefinedObjMayCauseFalseNegative(), 2, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.fieldReadAferCastMayCauseFalseNegative(Iterator), 6, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.fieldReadInCalleeMayCauseFalseNegative(), 3, NULL_DEREFERENCE
+src/infer/AnalysisStops.java, void AnalysisStops.fieldReadInCalleeWithAngelicObjFieldMayCauseFalseNegative(), 3, NULL_DEREFERENCE
+src/infer/AnalysisStops.java, void AnalysisStops.fieldReadOnUndefinedObjMayCauseFalseNegative(), 3, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.fieldWriteOnUndefinedObjMayCauseFalseNegative(), 3, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.heapFieldOfAngelicObjMayCauseFalseNegative(), 4, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.infiniteMaterializationMayCauseFalseNegative(boolean), 5, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.primitiveFieldOfAngelicObjMayCauseFalseNegative(), 3, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.primitiveFieldOfAngelicObjMayCauseFalseNegative(), 5, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.recursiveAngelicTypesMayCauseFalseNegative(), 4, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.skipFunctionInLoopMayCauseFalseNegative(), 5, NULL_DEREFERENCE
+src/infer/AnalysisStops.java, void AnalysisStops.skipPointerDerefMayCauseCalleeFalseNegative(), 2, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.skipPointerDerefMayCauseInterprocFalseNegative(), 2, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.skipPointerDerefMayCauseLocalFalseNegative(), 3, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.specInferenceMayFailAndCauseFalseNegative(boolean,Iterator), 2, RETURN_VALUE_IGNORED
+src/infer/AnalysisStops.java, void AnalysisStops.specInferenceMayFailAndCauseFalseNegative(boolean,Iterator), 26, DIVIDE_BY_ZERO
+src/infer/AnalysisStops.java, void AnalysisStops.specInferenceMayFailAndCauseFalseNegative(boolean,Iterator), 3, RETURN_VALUE_IGNORED
+src/infer/ArrayOutOfBounds.java, int ArrayOutOfBounds.arrayOutOfBounds(), 2, ARRAY_OUT_OF_BOUNDS_L1
+src/infer/AutoGenerated.java, void AutoGenerated.npe(), 2, NULL_DEREFERENCE
+src/infer/Builtins.java, void Builtins.causeError(Object), 2, NULL_DEREFERENCE
+src/infer/Builtins.java, void Builtins.doNotBlockError(Object), 3, NULL_DEREFERENCE
+src/infer/ClassCastExceptions.java, int ClassCastExceptions.classCastExceptionImplementsInterface(), 0, CLASS_CAST_EXCEPTION
+src/infer/ClassCastExceptions.java, void ClassCastExceptions.classCastException(), 2, CLASS_CAST_EXCEPTION
+src/infer/CloseableAsResourceExample.java, T CloseableAsResourceExample.sourceOfNullWithResourceLeak(), 1, RESOURCE_LEAK
+src/infer/CloseableAsResourceExample.java, void CloseableAsResourceExample.failToCloseWithCloseQuietly(), 5, RESOURCE_LEAK
+src/infer/CloseableAsResourceExample.java, void CloseableAsResourceExample.leakFoundWhenIndirectlyImplementingCloseable(), 1, RESOURCE_LEAK
+src/infer/CloseableAsResourceExample.java, void CloseableAsResourceExample.notClosingCloseable(), 1, RESOURCE_LEAK
+src/infer/CloseableAsResourceExample.java, void CloseableAsResourceExample.notClosingWrapper(), 2, RESOURCE_LEAK
+src/infer/CloseableAsResourceExample.java, void CloseableAsResourceExample.skippedVritualCallDoesNotCloseResourceOnReceiver(), 2, RESOURCE_LEAK
+src/infer/CloseableAsResourceExample.java, void CloseableAsResourceExample.withException(), 4, RESOURCE_LEAK
+src/infer/ContextLeaks.java, ContextLeaks$Singleton ContextLeaks$Singleton.getInstance(Context), 4, CONTEXT_LEAK
+src/infer/ContextLeaks.java, ContextLeaks$Singleton ContextLeaks.singletonLeak(), 1, CONTEXT_LEAK
+src/infer/ContextLeaks.java, void ContextLeaks.directLeak(), 2, CONTEXT_LEAK
+src/infer/ContextLeaks.java, void ContextLeaks.indirectLeak(), 4, CONTEXT_LEAK
+src/infer/ContextLeaks.java, void ContextLeaks.leakAfterInstanceFieldWrite(), 3, CONTEXT_LEAK
+src/infer/ContextLeaks.java, void ContextLeaks.nonStaticInnerClassLeak(), 2, CONTEXT_LEAK
+src/infer/CursorLeaks.java, int CursorLeaks.completeDownloadNotClosed(DownloadManager), 8, RESOURCE_LEAK
+src/infer/CursorLeaks.java, int CursorLeaks.cursorNotClosed(SQLiteDatabase), 4, RESOURCE_LEAK
+src/infer/CursorLeaks.java, int CursorLeaks.getBucketCountNotClosed(), 10, RESOURCE_LEAK
+src/infer/CursorLeaks.java, int CursorLeaks.getImageCountHelperNotClosed(String), 13, RESOURCE_LEAK
+src/infer/CursorLeaks.java, void CursorLeaks.loadPrefsFromContentProviderNotClosed(), 11, RESOURCE_LEAK
+src/infer/CursorLeaks.java, void CursorLeaks.queryUVMLegacyDbNotClosed(), 4, RESOURCE_LEAK
+src/infer/CursorLeaks.java, void CursorLeaks.queryUVMLegacyDbNotClosed(), 4, RETURN_VALUE_IGNORED
+src/infer/DivideByZero.java, int DivideByZero.callDivideByZeroInterProc(), 1, DIVIDE_BY_ZERO
+src/infer/DivideByZero.java, int DivideByZero.divByZeroLocal(String), 3, DIVIDE_BY_ZERO
+src/infer/DivideByZero.java, int DivideByZero.divideByZeroWithStaticField(), 2, DIVIDE_BY_ZERO
+src/infer/DynamicDispatch.java, void DynamicDispatch.dynamicDispatchShouldNotCauseFalseNegativeEasy(), 3, NULL_DEREFERENCE
+src/infer/DynamicDispatch.java, void DynamicDispatch.interfaceShouldNotCauseFalseNegativeEasy(), 3, NULL_DEREFERENCE
+src/infer/DynamicDispatch.java, void DynamicDispatch.interfaceShouldNotCauseFalseNegativeHard(DynamicDispatch$Interface), 2, NULL_DEREFERENCE
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.bufferedInputStreamNotClosedAfterRead(), 5, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.bufferedInputStreamNotClosedAfterRead(), 7, RESOURCE_LEAK
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.checkedInputStreamClosedAfterSkip(), 6, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.checkedInputStreamNotClosedAfterRead(), 5, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.checkedInputStreamNotClosedAfterRead(), 7, RESOURCE_LEAK
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.cipherInputStreamClosedAfterRead(), 6, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.cipherInputStreamNotClosedAfterSkip(), 5, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.cipherInputStreamNotClosedAfterSkip(), 7, RESOURCE_LEAK
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.dataInputStreamClosedAfterReadBoolean(), 6, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.dataInputStreamNotClosedAfterRead(), 6, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.dataInputStreamNotClosedAfterRead(), 8, RESOURCE_LEAK
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.deflaterInputStreamNotClosedAfterRead(), 5, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.deflaterInputStreamNotClosedAfterRead(), 7, RESOURCE_LEAK
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.digestInputStreamClosedAfterRead(), 6, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.digestInputStreamNotClosedAfterRead(), 6, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.digestInputStreamNotClosedAfterRead(), 8, RESOURCE_LEAK
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.gzipInputStreamClosedAfterRead(), 6, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.gzipInputStreamNotClosedAfterRead(), 4, RESOURCE_LEAK
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.gzipInputStreamNotClosedAfterRead(), 5, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.gzipInputStreamNotClosedAfterRead(), 7, RESOURCE_LEAK
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.inflaterInputStreamClosedAfterAvailable(), 6, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.inflaterInputStreamNotClosedAfterRead(), 5, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.inflaterInputStreamNotClosedAfterRead(), 7, RESOURCE_LEAK
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.pushbackInputStreamNotClosedAfterRead(), 5, RETURN_VALUE_IGNORED
+src/infer/FilterInputStreamLeaks.java, void FilterInputStreamLeaks.pushbackInputStreamNotClosedAfterRead(), 7, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.bufferedOutputStreamNotClosedAfterWrite(), 8, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.checkedOutputStreamNotClosedAfterWrite(), 8, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.cipherOutputStreamNotClosedAfterWrite(), 8, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.dataOutputStreamNotClosedAfterWrite(), 8, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.deflaterOutputStreamNotClosedAfterWrite(), 8, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.digestOutputStreamNotClosedAfterWrite(), 8, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.filterOutputStreamNotClosedAfterWrite(), 8, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.gzipOutputStreamNotClosedAfterFlush(), 4, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.gzipOutputStreamNotClosedAfterFlush(), 7, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.inflaterOutputStreamNotClosedAfterWrite(), 8, RESOURCE_LEAK
+src/infer/FilterOutputStreamLeaks.java, void FilterOutputStreamLeaks.printStreamNotClosedAfterWrite(), 6, RESOURCE_LEAK
+src/infer/HashMapExample.java, Integer HashMapExample.getOrCreateInteger(HashMap,int), 8, RETURN_VALUE_IGNORED
+src/infer/HashMapExample.java, int HashMapExample.getOneIntegerWithoutCheck(), 6, NULL_DEREFERENCE
+src/infer/HashMapExample.java, void HashMapExample.containsIntegerTwiceThenGetTwice(HashMap), 10, RETURN_VALUE_IGNORED
+src/infer/HashMapExample.java, void HashMapExample.containsIntegerTwiceThenGetTwice(HashMap), 9, RETURN_VALUE_IGNORED
+src/infer/HashMapExample.java, void HashMapExample.getTwoIntegersWithOneCheck(Integer,Integer), 10, RETURN_VALUE_IGNORED
+src/infer/HashMapExample.java, void HashMapExample.getTwoIntegersWithOneCheck(Integer,Integer), 11, NULL_DEREFERENCE
+src/infer/HashMapExample.java, void HashMapExample.getTwoIntegersWithOneCheck(Integer,Integer), 11, RETURN_VALUE_IGNORED
+src/infer/HashMapExample.java, void HashMapExample.putIntegerTwiceThenGetTwice(HashMap), 12, RETURN_VALUE_IGNORED
+src/infer/HashMapExample.java, void HashMapExample.putIntegerTwiceThenGetTwice(HashMap), 13, RETURN_VALUE_IGNORED
+src/infer/HashMapExample.java, void HashMapExample.putIntegerTwiceThenGetTwice(HashMap), 6, RETURN_VALUE_IGNORED
+src/infer/HashMapExample.java, void HashMapExample.putIntegerTwiceThenGetTwice(HashMap), 7, RETURN_VALUE_IGNORED
+src/infer/JunitAssertion.java, void JunitAssertion.inconsistentAssertion(JunitAssertion$A), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, String NullPointerExceptions.hashmapNPE(HashMap,Object), 1, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, String NullPointerExceptions.nullTryLock(FileChannel), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, String NullPointerExceptions.testSystemGetPropertyArgument(), 1, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, String NullPointerExceptions.tryLockThrows(FileChannel), 6, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, int NullPointerExceptions.NPEvalueOfFromHashmapBad(HashMap,int), 1, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, int NullPointerExceptions.nullListFiles(String), 3, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, int NullPointerExceptions.nullPointerException(), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, int NullPointerExceptions.nullPointerExceptionInterProc(), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, int NullPointerExceptions.nullPointerExceptionWithAChainOfFields(NullPointerExceptions$C), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, int NullPointerExceptions.nullPointerExceptionWithArray(), 3, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, int NullPointerExceptions.nullPointerExceptionWithExceptionHandling(boolean), 5, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions$$$Class$Name$With$Dollars.npeWithDollars(), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.badCheckShouldCauseNPE(), 1, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.cursorFromContentResolverNPE(String), 9, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.derefNull(), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.derefNullableGetter(), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.derefNullableRet(boolean), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.derefUndefNullableRet(), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.derefUndefNullableRetWrapper(), 1, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.dereferenceAfterLoopOnList(NullPointerExceptions$L), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.dereferenceAfterUnlock1(Lock), 4, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.dereferenceAfterUnlock2(Lock), 6, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.noNullPointerExceptionAfterSkipFunction(), 4, RETURN_VALUE_IGNORED
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullPointerExceptionArrayLength(), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullPointerExceptionCallArrayReadMethod(), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullPointerExceptionFromFailingFileOutputStreamConstructor(), 7, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullPointerExceptionFromFaillingResourceConstructor(), 6, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullPointerExceptionInArrayLengthLoop(java.lang.Object[]), 3, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullPointerExceptionUnlessFrameFails(), 4, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullPointerExceptionWithNullArrayParameter(), 1, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullPointerExceptionWithNullObjectParameter(), 1, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullableFieldNPE(), 1, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullableNonNullStringAfterTextUtilsIsEmptyCheckShouldNotCauseNPE(String), 2, RETURN_VALUE_IGNORED
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.nullableParamNPE(Object), 1, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.optionalNPE(Optional), 1, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.otherSinkWithNeverNullSource(), 3, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.sinkWithNeverNullSource(), 3, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.someNPEAfterResourceLeak(), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.stringConstantEqualsFalseNotNPE_FP(), 10, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.stringVarEqualsFalseNPE(), 5, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.testSystemGetPropertyReturn(), 2, NULL_DEREFERENCE
+src/infer/NullPointerExceptions.java, void NullPointerExceptions.testSystemGetPropertyReturn(), 2, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.bufferedReaderClosed(), 4, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.bufferedReaderNotClosedAfterRead(), 4, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.bufferedReaderNotClosedAfterRead(), 6, RESOURCE_LEAK
+src/infer/ReaderLeaks.java, void ReaderLeaks.fileReaderClosed(), 4, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.fileReaderNotClosedAfterRead(), 4, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.fileReaderNotClosedAfterRead(), 6, RESOURCE_LEAK
+src/infer/ReaderLeaks.java, void ReaderLeaks.inputStreamReaderClosed(), 4, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.inputStreamReaderNotClosedAfterRead(), 4, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.inputStreamReaderNotClosedAfterRead(), 6, RESOURCE_LEAK
+src/infer/ReaderLeaks.java, void ReaderLeaks.pipedReaderClosed(PipedWriter), 5, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.pipedReaderFalsePositive(), 5, RESOURCE_LEAK
+src/infer/ReaderLeaks.java, void ReaderLeaks.pipedReaderFalsePositive(), 5, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.pipedReaderNotClosedAfterConnect(PipedWriter), 5, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.pipedReaderNotClosedAfterConnect(PipedWriter), 7, RESOURCE_LEAK
+src/infer/ReaderLeaks.java, void ReaderLeaks.pipedReaderNotClosedAfterConstructedWithWriter(), 6, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.pipedReaderNotClosedAfterConstructedWithWriter(), 8, RESOURCE_LEAK
+src/infer/ReaderLeaks.java, void ReaderLeaks.pushbackReaderClosed(), 4, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.pushbackReaderNotClosedAfterRead(), 4, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.pushbackReaderNotClosedAfterRead(), 6, RESOURCE_LEAK
+src/infer/ReaderLeaks.java, void ReaderLeaks.readerClosed(), 4, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.readerNotClosedAfterRead(), 4, RETURN_VALUE_IGNORED
+src/infer/ReaderLeaks.java, void ReaderLeaks.readerNotClosedAfterRead(), 6, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, String ResourceLeaks.readInstallationFileBad(File), 6, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, boolean ResourceLeaks.jarFileNotClosed(), 3, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, int ResourceLeaks.fileOutputStreamTwoLeaks1(boolean), 3, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, int ResourceLeaks.fileOutputStreamTwoLeaks1(boolean), 6, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, int ResourceLeaks.readConfigNotCloseStream(String), 5, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.activityObtainTypedArrayAndLeak(Activity), 2, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.closedQuietlyWithCloseables(), 3, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.closedWithCloseables(), 3, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.contextObtainTypedArrayAndLeak(Context), 2, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.copyFileLeak(File,File), 11, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.copyFileLeak(File,File), 11, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.copyFileLeak(File,File), 4, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.deflaterLeak(), 1, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.fileInputStreamClosed(), 4, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.fileInputStreamNotClosedAfterRead(), 4, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.fileInputStreamNotClosedAfterRead(), 6, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.fileOutputStreamNotClosed(), 1, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.fileOutputStreamNotClosedAfterWrite(), 7, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.fileOutputStreamOneLeak(), 2, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.fileOutputStreamTwoLeaks2(), 2, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.fileOutputStreamTwoLeaks2(), 5, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.inflaterLeak(), 1, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.jarInputStreamLeak(), 3, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.jarOutputStreamLeak(), 3, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.nestedBad1(), 1, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.nestedBad2(), 1, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.nestedBadJarInputStream(File), 1, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.nestedBadJarOutputStream(), 1, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.objectInputStreamClosed(), 5, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.objectInputStreamClosed2(), 5, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.objectInputStreamClosedNestedBad(), 3, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.objectInputStreamClosedNestedBad(), 4, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.objectInputStreamNotClosedAfterRead(), 3, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.objectInputStreamNotClosedAfterRead(), 4, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.objectInputStreamNotClosedAfterRead(), 6, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.objectOutputStreamClosedNestedBad(), 3, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.objectOutputStreamNotClosedAfterWrite(), 4, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.objectOutputStreamNotClosedAfterWrite(), 7, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.openHttpURLConnectionNotDisconnected(), 7, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.openHttpsURLConnectionNotDisconnected(), 3, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.parseFromInputStreamAndLeak(JsonFactory), 5, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.pipedInputStreamClosed(PipedOutputStream), 4, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.pipedInputStreamNotClosedAfterRead(PipedOutputStream), 4, RETURN_VALUE_IGNORED
+src/infer/ResourceLeaks.java, void ResourceLeaks.pipedInputStreamNotClosedAfterRead(PipedOutputStream), 6, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.pipedOutputStreamNotClosedAfterWrite(), 7, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.scannerNotClosed(), 1, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.serverSocketNotClosed(), 12, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.socketNotClosed(), 1, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.themeObtainTypedArrayAndLeak(Resources$Theme), 2, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.twoResources(), 11, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.twoResourcesRandomAccessFile(), 10, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.twoResourcesServerSocket(), 10, RESOURCE_LEAK
+src/infer/ResourceLeaks.java, void ResourceLeaks.zipFileLeakExceptionalBranch(), 5, RESOURCE_LEAK
+src/infer/ReturnValueIgnored.java, void ReturnValueIgnored.returnValueIgnored(), 1, RETURN_VALUE_IGNORED
+src/infer/TaintExample.java, InputStream TaintExample.socketIgnoreExceptionNoVerify(SSLSocketFactory), 9, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, InputStream TaintExample.socketNotVerifiedSimple(SSLSocketFactory), 3, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, InputStream TaintExample.socketVerifiedForgotToCheckRetval(SSLSocketFactory,HostnameVerifier,SSLSession), 6, RETURN_VALUE_IGNORED
+src/infer/TaintExample.java, InputStream TaintExample.socketVerifiedForgotToCheckRetval(SSLSocketFactory,HostnameVerifier,SSLSession), 7, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, InputStream TaintExample.taintingShouldNotPreventInference1(SSLSocketFactory), 4, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, InputStream TaintExample.taintingShouldNotPreventInference2(SSLSocketFactory), 3, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, Socket TaintExample.callReadInputStreamCauseTaintError(SSLSocketFactory), 3, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.contentValuesPutWithTaintedString(ContentValues,SharedPreferences,String,String), 2, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.interprocTaintErrorWithModelMethods1(), 1, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.interprocTaintErrorWithModelMethods2(), 1, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.interprocTaintErrorWithModelMethods3(), 1, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.interprocTaintErrorWithModelMethodsUndefined1(), 1, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.interprocTaintErrorWithModelMethodsUndefined2(), 1, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.interprocTaintErrorWithModelMethodsUndefined3(), 1, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.simpleTaintErrorWithModelMethods(), 2, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.simpleTaintErrorWithModelMethodsUndefined(), 2, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.testIntegritySinkAnnotReport(String), 1, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.testIntegritySourceAnnot(), 1, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.testIntegritySourceInstanceFieldAnnot(), 2, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.testIntegritySourceStaticFieldAnnot(), 2, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.testPrivacySinkAnnot1(), 2, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.testPrivacySinkAnnot3(), 2, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.testPrivacySourceAnnot(), 1, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.testPrivacySourceFieldAnnotPropagation(), 2, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.testPrivacySourceInstanceFieldAnnot(), 2, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/TaintExample.java, void TaintExample.testPrivacySourceStaticFieldAnnot(), 2, TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION
+src/infer/WriterLeaks.java, void WriterLeaks.bufferedWriterNotClosedAfterWrite(), 7, RESOURCE_LEAK
+src/infer/WriterLeaks.java, void WriterLeaks.fileWriterNotClosedAfterWrite(), 6, RESOURCE_LEAK
+src/infer/WriterLeaks.java, void WriterLeaks.outputStreamWriterNotClosedAfterWrite(), 6, RESOURCE_LEAK
+src/infer/WriterLeaks.java, void WriterLeaks.pipedWriterNotClosedAfterConnect(PipedReader), 7, RESOURCE_LEAK
+src/infer/WriterLeaks.java, void WriterLeaks.pipedWriterNotClosedAfterConstructedWithReader(), 8, RESOURCE_LEAK
+src/infer/WriterLeaks.java, void WriterLeaks.printWriterNotClosedAfterAppend(), 4, RESOURCE_LEAK
+src/infer/WriterLeaks.java, void WriterLeaks.writerNotClosedAfterWrite(), 6, RESOURCE_LEAK
diff --git a/infer/tests/build_systems/ant/src b/infer/tests/build_systems/ant/src
new file mode 120000
index 000000000..08d1883bd
--- /dev/null
+++ b/infer/tests/build_systems/ant/src
@@ -0,0 +1 @@
+../../codetoanalyze/java
\ No newline at end of file
diff --git a/infer/tests/build_systems/build_integration_tests.py b/infer/tests/build_systems/build_integration_tests.py
index ec75da74f..4cffbd1e5 100755
--- a/infer/tests/build_systems/build_integration_tests.py
+++ b/infer/tests/build_systems/build_integration_tests.py
@@ -42,6 +42,7 @@ from inferlib import config, issues, utils
ROOT_DIR = os.path.join(SCRIPT_DIR, os.pardir, os.pardir, os.pardir)
INFER_BIN = os.path.join(ROOT_DIR, 'infer', 'bin', 'infer')
+INFERPRINT_BIN = os.path.join(ROOT_DIR, 'infer', 'bin', 'InferPrint')
CLANG_BIN = os.path.join(ROOT_DIR, 'facebook-clang-plugins', 'clang',
'install', 'bin', 'clang')
@@ -60,7 +61,6 @@ CODETOANALYZE_DIR = os.path.join(SCRIPT_DIR, 'codetoanalyze')
EXPECTED_OUTPUTS_DIR = os.path.join(SCRIPT_DIR, 'expected_outputs')
ALL_TESTS = [
- 'ant',
'assembly',
'buck',
'cmake',
@@ -150,6 +150,24 @@ def run_analysis(clean_cmds, build_cmds, extra_check, should_fail, env=None):
if exn.returncode != should_fail:
raise
+ # Set this to True to create an issues.exp file using the
+ # results of the test. This is a temporary hack to aid
+ # migrating the tests from this file to Makefiles. It can be
+ # useful to compare the result of your migrated test with the
+ # issues.exp that this gives you.
+ if False:
+ inferprint_cmd = [INFERPRINT_BIN, '-q', '--issues-tests',
+ '-o', temp_out_dir] + extra_args
+ with tempfile.TemporaryFile(
+ mode='w',
+ suffix='.out',
+ prefix='issues.exp') as analysis_output:
+ try:
+ subprocess.check_call(inferprint_cmd, env=env)
+ except subprocess.CalledProcessError, exn:
+ if exn.returncode != should_fail:
+ raise
+
json_path = os.path.join(temp_out_dir, REPORT_JSON)
found_errors = utils.load_json_from_path(json_path)
extra_check(temp_out_dir)
diff --git a/infer/tests/build_systems/expected_outputs/ant_report.json b/infer/tests/build_systems/expected_outputs/ant_report.json
deleted file mode 100644
index 65c65ef12..000000000
--- a/infer/tests/build_systems/expected_outputs/ant_report.json
+++ /dev/null
@@ -1,847 +0,0 @@
-[
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "Socket TaintExample.callReadInputStreamCauseTaintError(SSLSocketFactory)"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.contentValuesPutWithTaintedString(ContentValues,SharedPreferences,String,String)"
- },
- {
- "bug_type": "CONTEXT_LEAK",
- "file": "codetoanalyze/java/infer/ContextLeaks.java",
- "procedure": "void ContextLeaks.directLeak()"
- },
- {
- "bug_type": "CONTEXT_LEAK",
- "file": "codetoanalyze/java/infer/ContextLeaks.java",
- "procedure": "ContextLeaks$Singleton ContextLeaks$Singleton.getInstance(Context)"
- },
- {
- "bug_type": "CONTEXT_LEAK",
- "file": "codetoanalyze/java/infer/ContextLeaks.java",
- "procedure": "void ContextLeaks.indirectLeak()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.interprocTaintErrorWithModelMethods1()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.interprocTaintErrorWithModelMethods2()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.interprocTaintErrorWithModelMethods3()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.interprocTaintErrorWithModelMethodsUndefined1()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.interprocTaintErrorWithModelMethodsUndefined2()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.interprocTaintErrorWithModelMethodsUndefined3()"
- },
- {
- "bug_type": "CONTEXT_LEAK",
- "file": "codetoanalyze/java/infer/ContextLeaks.java",
- "procedure": "void ContextLeaks.leakAfterInstanceFieldWrite()"
- },
- {
- "bug_type": "CONTEXT_LEAK",
- "file": "codetoanalyze/java/infer/ContextLeaks.java",
- "procedure": "void ContextLeaks.nonStaticInnerClassLeak()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.simpleTaintErrorWithModelMethods()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.simpleTaintErrorWithModelMethodsUndefined()"
- },
- {
- "bug_type": "CONTEXT_LEAK",
- "file": "codetoanalyze/java/infer/ContextLeaks.java",
- "procedure": "ContextLeaks$Singleton ContextLeaks.singletonLeak()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "InputStream TaintExample.socketIgnoreExceptionNoVerify(SSLSocketFactory)"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "InputStream TaintExample.socketNotVerifiedSimple(SSLSocketFactory)"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "InputStream TaintExample.socketVerifiedForgotToCheckRetval(SSLSocketFactory,HostnameVerifier,SSLSession)"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "InputStream TaintExample.taintingShouldNotPreventInference1(SSLSocketFactory)"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "InputStream TaintExample.taintingShouldNotPreventInference2(SSLSocketFactory)"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.testIntegritySinkAnnotReport(String)"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.testIntegritySourceAnnot()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.testIntegritySourceInstanceFieldAnnot()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.testIntegritySourceStaticFieldAnnot()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.testPrivacySinkAnnot1()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.testPrivacySinkAnnot3()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.testPrivacySourceAnnot()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.testPrivacySourceFieldAnnotPropagation()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.testPrivacySourceInstanceFieldAnnot()"
- },
- {
- "bug_type": "TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION",
- "file": "codetoanalyze/java/infer/TaintExample.java",
- "procedure": "void TaintExample.testPrivacySourceStaticFieldAnnot()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "int NullPointerExceptions.NPEvalueOfFromHashmapBad(HashMap,int)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.activityObtainTypedArrayAndLeak(Activity)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.badCheckShouldCauseNPE()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterInputStreamLeaks.java",
- "procedure": "void FilterInputStreamLeaks.bufferedInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.bufferedOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ReaderLeaks.java",
- "procedure": "void ReaderLeaks.bufferedReaderNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/WriterLeaks.java",
- "procedure": "void WriterLeaks.bufferedWriterNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterInputStreamLeaks.java",
- "procedure": "void FilterInputStreamLeaks.checkedInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.checkedOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterInputStreamLeaks.java",
- "procedure": "void FilterInputStreamLeaks.cipherInputStreamNotClosedAfterSkip()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.cipherOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CursorLeaks.java",
- "procedure": "int CursorLeaks.completeDownloadNotClosed(DownloadManager)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.contextObtainTypedArrayAndLeak(Context)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.copyFileLeak(File,File)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.copyFileLeak(File,File)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.cursorFromContentResolverNPE(String)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CursorLeaks.java",
- "procedure": "int CursorLeaks.cursorNotClosed(SQLiteDatabase)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterInputStreamLeaks.java",
- "procedure": "void FilterInputStreamLeaks.dataInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.dataOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterInputStreamLeaks.java",
- "procedure": "void FilterInputStreamLeaks.deflaterInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.deflaterLeak()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.deflaterOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.derefNull()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.derefNullableGetter()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.derefNullableRet(boolean)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.derefUndefNullableRet()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.derefUndefNullableRetWrapper()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.dereferenceAfterLoopOnList(NullPointerExceptions$L)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.dereferenceAfterUnlock1(Lock)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.dereferenceAfterUnlock2(Lock)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterInputStreamLeaks.java",
- "procedure": "void FilterInputStreamLeaks.digestInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.digestOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/Builtins.java",
- "procedure": "void Builtins.doNotBlockError(Object)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/DynamicDispatch.java",
- "procedure": "void DynamicDispatch.dynamicDispatchShouldNotCauseFalseNegativeEasy()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CloseableAsResourceExample.java",
- "procedure": "void CloseableAsResourceExample.failToCloseWithCloseQuietly()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/AnalysisStops.java",
- "procedure": "void AnalysisStops.fieldReadInCalleeMayCauseFalseNegative()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/AnalysisStops.java",
- "procedure": "void AnalysisStops.fieldReadInCalleeWithAngelicObjFieldMayCauseFalseNegative()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.fileInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.fileOutputStreamNotClosed()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.fileOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.fileOutputStreamOneLeak()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "int ResourceLeaks.fileOutputStreamTwoLeaks1(boolean)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "int ResourceLeaks.fileOutputStreamTwoLeaks1(boolean)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.fileOutputStreamTwoLeaks2()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.fileOutputStreamTwoLeaks2()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ReaderLeaks.java",
- "procedure": "void ReaderLeaks.fileReaderNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/WriterLeaks.java",
- "procedure": "void WriterLeaks.fileWriterNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.filterOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CursorLeaks.java",
- "procedure": "int CursorLeaks.getBucketCountNotClosed()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CursorLeaks.java",
- "procedure": "int CursorLeaks.getImageCountHelperNotClosed(String)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/HashMapExample.java",
- "procedure": "int HashMapExample.getOneIntegerWithoutCheck()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/HashMapExample.java",
- "procedure": "void HashMapExample.getTwoIntegersWithOneCheck(Integer,Integer)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterInputStreamLeaks.java",
- "procedure": "void FilterInputStreamLeaks.gzipInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterInputStreamLeaks.java",
- "procedure": "void FilterInputStreamLeaks.gzipInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.gzipOutputStreamNotClosedAfterFlush()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.gzipOutputStreamNotClosedAfterFlush()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "String NullPointerExceptions.hashmapNPE(HashMap,Object)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterInputStreamLeaks.java",
- "procedure": "void FilterInputStreamLeaks.inflaterInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.inflaterLeak()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.inflaterOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ReaderLeaks.java",
- "procedure": "void ReaderLeaks.inputStreamReaderNotClosedAfterRead()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/DynamicDispatch.java",
- "procedure": "void DynamicDispatch.interfaceShouldNotCauseFalseNegativeEasy()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/DynamicDispatch.java",
- "procedure": "void DynamicDispatch.interfaceShouldNotCauseFalseNegativeHard(DynamicDispatch$Interface)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "boolean ResourceLeaks.jarFileNotClosed()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.jarInputStreamLeak()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.jarOutputStreamLeak()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CloseableAsResourceExample.java",
- "procedure": "void CloseableAsResourceExample.leakFoundWhenIndirectlyImplementingCloseable()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CursorLeaks.java",
- "procedure": "void CursorLeaks.loadPrefsFromContentProviderNotClosed()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.nestedBad1()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.nestedBad2()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.nestedBadJarInputStream(File)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.nestedBadJarOutputStream()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CloseableAsResourceExample.java",
- "procedure": "void CloseableAsResourceExample.notClosingCloseable()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CloseableAsResourceExample.java",
- "procedure": "void CloseableAsResourceExample.notClosingWrapper()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/AutoGenerated.java",
- "procedure": "void AutoGenerated.npe()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions$$$Class$Name$With$Dollars.npeWithDollars()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "int NullPointerExceptions.nullListFiles(String)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "int NullPointerExceptions.nullPointerException()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.nullPointerExceptionArrayLength()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.nullPointerExceptionCallArrayReadMethod()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.nullPointerExceptionFromFailingFileOutputStreamConstructor()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.nullPointerExceptionFromFaillingResourceConstructor()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.nullPointerExceptionInArrayLengthLoop(java.lang.Object[])"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "int NullPointerExceptions.nullPointerExceptionInterProc()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.nullPointerExceptionUnlessFrameFails()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "int NullPointerExceptions.nullPointerExceptionWithExceptionHandling(boolean)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.nullPointerExceptionWithNullArrayParameter()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.nullPointerExceptionWithNullObjectParameter()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "String NullPointerExceptions.nullTryLock(FileChannel)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.nullableFieldNPE()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.nullableParamNPE(Object)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.objectInputStreamClosedNestedBad()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.objectInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.objectInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.objectOutputStreamClosedNestedBad()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.objectOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.objectOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.openHttpURLConnectionNotDisconnected()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.openHttpsURLConnectionNotDisconnected()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.optionalNPE(Optional)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.otherSinkWithNeverNullSource()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/WriterLeaks.java",
- "procedure": "void WriterLeaks.outputStreamWriterNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.parseFromInputStreamAndLeak(JsonFactory)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.pipedInputStreamNotClosedAfterRead(PipedOutputStream)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.pipedOutputStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ReaderLeaks.java",
- "procedure": "void ReaderLeaks.pipedReaderFalsePositive()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ReaderLeaks.java",
- "procedure": "void ReaderLeaks.pipedReaderNotClosedAfterConnect(PipedWriter)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ReaderLeaks.java",
- "procedure": "void ReaderLeaks.pipedReaderNotClosedAfterConstructedWithWriter()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/WriterLeaks.java",
- "procedure": "void WriterLeaks.pipedWriterNotClosedAfterConnect(PipedReader)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/WriterLeaks.java",
- "procedure": "void WriterLeaks.pipedWriterNotClosedAfterConstructedWithReader()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterOutputStreamLeaks.java",
- "procedure": "void FilterOutputStreamLeaks.printStreamNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/WriterLeaks.java",
- "procedure": "void WriterLeaks.printWriterNotClosedAfterAppend()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/FilterInputStreamLeaks.java",
- "procedure": "void FilterInputStreamLeaks.pushbackInputStreamNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ReaderLeaks.java",
- "procedure": "void ReaderLeaks.pushbackReaderNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CursorLeaks.java",
- "procedure": "void CursorLeaks.queryUVMLegacyDbNotClosed()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "int ResourceLeaks.readConfigNotCloseStream(String)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "String ResourceLeaks.readInstallationFileBad(File)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ReaderLeaks.java",
- "procedure": "void ReaderLeaks.readerNotClosedAfterRead()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.scannerNotClosed()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.serverSocketNotClosed()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.sinkWithNeverNullSource()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/AnalysisStops.java",
- "procedure": "void AnalysisStops.skipFunctionInLoopMayCauseFalseNegative()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CloseableAsResourceExample.java",
- "procedure": "void CloseableAsResourceExample.skippedVritualCallDoesNotCloseResourceOnReceiver()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.socketNotClosed()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.someNPEAfterResourceLeak()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CloseableAsResourceExample.java",
- "procedure": "T CloseableAsResourceExample.sourceOfNullWithResourceLeak()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.stringConstantEqualsFalseNotNPE_FP()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.stringVarEqualsFalseNPE()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "String NullPointerExceptions.testSystemGetPropertyArgument()"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "void NullPointerExceptions.testSystemGetPropertyReturn()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.themeObtainTypedArrayAndLeak(Resources$Theme)"
- },
- {
- "bug_type": "NULL_DEREFERENCE",
- "file": "codetoanalyze/java/infer/NullPointerExceptions.java",
- "procedure": "String NullPointerExceptions.tryLockThrows(FileChannel)"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.twoResources()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.twoResourcesRandomAccessFile()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.twoResourcesServerSocket()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/CloseableAsResourceExample.java",
- "procedure": "void CloseableAsResourceExample.withException()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/WriterLeaks.java",
- "procedure": "void WriterLeaks.writerNotClosedAfterWrite()"
- },
- {
- "bug_type": "RESOURCE_LEAK",
- "file": "codetoanalyze/java/infer/ResourceLeaks.java",
- "procedure": "void ResourceLeaks.zipFileLeakExceptionalBranch()"
- }
-]
\ No newline at end of file