diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f1a4fd25d..e1a8426a2a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -84,7 +84,7 @@ jobs: - name: Run Unittests shell: bash run: | - cmake --build ./build --target check-phasar-unittests + cmake --build ./build --target check-phasar-unittests check-phasar-cli - name: Install PhASAR and Build Examples if: matrix.build == 'DebugLibdeps' # Circumvent conflicting ASAn flags diff --git a/.gitignore b/.gitignore index 2695fef470..7af933a2c1 100644 --- a/.gitignore +++ b/.gitignore @@ -142,3 +142,6 @@ unittests/PhasarLLVM/ifdside/Problems/IFDSTaintAnalysisTest unittests/PhasarLLVM/Pointer/LLVMTypeHierarchyTest unittests/Utils/LLVMShorthandsTest unittests/Utils/PAMMTest + +# LLVM lit test times files +*.lit_test_times.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a28946c99..1692878e08 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,6 +161,7 @@ if(PHASAR_ALLOW_LTO_IN_RELEASE_BUILD) endif() option(PHASAR_BUILD_UNITTESTS "Build all tests (default is ON)" ${PHASAR_BUILD_OPTIONAL_TARGETS_DEFAULT}) +option(PHASAR_ENABLE_INTEGRATIONTESTS "Enable LIT integration tests (default is ON)" ${PHASAR_BUILD_OPTIONAL_TARGETS_DEFAULT}) option(PHASAR_BUILD_OPENSSL_TS_UNITTESTS "Build OPENSSL typestate tests (require OpenSSL, default is OFF)" OFF) diff --git a/include/phasar/PhasarLLVM/DataFlow/IfdsIde/Problems/IDEExtendedTaintAnalysis.h b/include/phasar/PhasarLLVM/DataFlow/IfdsIde/Problems/IDEExtendedTaintAnalysis.h index f91866af7f..b4d5d64597 100644 --- a/include/phasar/PhasarLLVM/DataFlow/IfdsIde/Problems/IDEExtendedTaintAnalysis.h +++ b/include/phasar/PhasarLLVM/DataFlow/IfdsIde/Problems/IDEExtendedTaintAnalysis.h @@ -48,6 +48,12 @@ struct IDEExtendedTaintAnalysisDomain : public LLVMAnalysisDomainDefault { /// sanitizer on the current path, Bottom means sanitized on all paths. using l_t = XTaint::EdgeDomain; }; + +template <> +struct DefaultAnalysisPrinterSelector + : type_identity< + DefaultLLVMAnalysisPrinter> {}; + namespace XTaint { /// \brief An IDE-based taint analysis that uses k-limited field-access paths to diff --git a/include/phasar/PhasarLLVM/Utils/LLVMAnalysisPrinter.h b/include/phasar/PhasarLLVM/Utils/LLVMAnalysisPrinter.h index 7592168dd1..0c917cc6d2 100644 --- a/include/phasar/PhasarLLVM/Utils/LLVMAnalysisPrinter.h +++ b/include/phasar/PhasarLLVM/Utils/LLVMAnalysisPrinter.h @@ -67,6 +67,11 @@ class DefaultLLVMAnalysisPrinter } void doOnFinalize(llvm::raw_ostream &OS) override { + if (DbgResultsEntries.empty() && NonDbgResultsEntries.empty()) { + OS << "No leaks found!\n"; + return; + } + size_t Ctr = 0; for (const auto &[DbgLoc, Results] : DbgResultsEntries) { OS << '#' << ++Ctr << ": "; diff --git a/test/.clang-format b/test/.clang-format new file mode 100644 index 0000000000..e3845288a2 --- /dev/null +++ b/test/.clang-format @@ -0,0 +1 @@ +DisableFormat: true diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000000..392594eb4e --- /dev/null +++ b/test/README.md @@ -0,0 +1,2 @@ +Run lit tests with the following command from the phasar source directory: +lit build/test/llvm_test_code/[FOLDER_OF_INTEREST]/ diff --git a/test/llvm_test_code/CMakeLists.txt b/test/llvm_test_code/CMakeLists.txt index dee9afd690..60c942e1c1 100644 --- a/test/llvm_test_code/CMakeLists.txt +++ b/test/llvm_test_code/CMakeLists.txt @@ -4,3 +4,44 @@ subdirlist(subdirs ${CMAKE_CURRENT_SOURCE_DIR}) foreach(subdir ${subdirs}) add_subdirectory(${subdir}) endforeach(subdir) + + +if (PHASAR_ENABLE_INTEGRATIONTESTS) + include(AddLLVM) + + find_program(LLVM_EXTERNAL_LIT_DEFAULT + NAMES lit-22 lit-21 lit-20 lit-16 llvm-lit lit + HINTS "${LLVM_TOOLS_BINARY_DIR}" + REQUIRED + ) + + set(LLVM_EXTERNAL_LIT "${LLVM_EXTERNAL_LIT_DEFAULT}" + CACHE STRING "Command used to spawn lit" + FORCE + ) + + get_filename_component(PSR_LIT_REALPATH ${LLVM_EXTERNAL_LIT} REALPATH) + get_filename_component(PSR_LIT_DIR ${PSR_LIT_REALPATH} DIRECTORY) + find_program(PSR_FILECHECK + NAMES FileCheck-22 FileCheck-21 FileCheck-20 FileCheck + HINTS "${PSR_LIT_DIR}" + REQUIRED + ) + + # Note: PSR_FILECHECK_DIR configured into lit.site.cfg.py + get_filename_component(PSR_FILECHECK_REALPATH ${PSR_FILECHECK} REALPATH) + get_filename_component(PSR_FILECHECK_DIR ${PSR_FILECHECK_REALPATH} DIRECTORY) + + configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in + ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py + MAIN_CONFIG ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py + ) + + add_lit_testsuite(check-phasar-cli "Running the phasar-cli lit test suite" + # Note: Currently, we only have LIT-tests for taint_analysis and xtaint + ${CMAKE_CURRENT_BINARY_DIR}/taint_analysis + ${CMAKE_CURRENT_BINARY_DIR}/xtaint + DEPENDS phasar-cli LLFileGeneration + ) +endif(PHASAR_ENABLE_INTEGRATIONTESTS) diff --git a/test/llvm_test_code/lit.cfg.py b/test/llvm_test_code/lit.cfg.py new file mode 100644 index 0000000000..263e9b8ce0 --- /dev/null +++ b/test/llvm_test_code/lit.cfg.py @@ -0,0 +1,31 @@ +import lit.formats +import os + +config.name = "phasar-cli" +config.test_format = lit.formats.ShTest(True) +config.suffixes = ['.c', '.cpp'] + +config.test_source_root = os.path.dirname(__file__) + +# Only files with a RUN: line are actual lit tests; everything else under +# taint_analysis/ and xtaint/ is not converted yet and would otherwise show +# up as "Unresolved". +config.excludes = ['Output'] +for root, _, files in os.walk(config.test_source_root): + for f in files: + if not f.endswith(tuple(config.suffixes)): + continue + with open(os.path.join(root, f)) as handle: + if 'RUN:' not in handle.read(): + config.excludes.append(f) + +config.test_exec_root = config.phasar_obj_root + +config.substitutions.append( + ('%phasar-cli', os.path.join(config.phasar_cli_dir, 'phasar-cli'))) +config.substitutions.append( + ('%llvm_test_code', config.phasar_ll_dir)) + +config.environment["PATH"] = os.pathsep.join( + [config.phasar_filecheck_dir, config.environment["PATH"]] +) diff --git a/test/llvm_test_code/lit.site.cfg.py.in b/test/llvm_test_code/lit.site.cfg.py.in new file mode 100644 index 0000000000..29dec92be3 --- /dev/null +++ b/test/llvm_test_code/lit.site.cfg.py.in @@ -0,0 +1,10 @@ +import lit.llvm + +config.phasar_obj_root = "@CMAKE_CURRENT_BINARY_DIR@" +config.phasar_cli_dir = "@PHASAR_BINARY_DIR@/tools/phasar-cli/" +config.phasar_ll_dir = "@PHASAR_BINARY_DIR@/test/llvm_test_code/" +config.phasar_filecheck_dir = "@PSR_FILECHECK_DIR@" + +lit.llvm.initialize(lit_config, config) + +lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/lit.cfg.py") diff --git a/test/llvm_test_code/taint_analysis/CMakeLists.txt b/test/llvm_test_code/taint_analysis/CMakeLists.txt index 1c3ff627f7..1d6faeda58 100644 --- a/test/llvm_test_code/taint_analysis/CMakeLists.txt +++ b/test/llvm_test_code/taint_analysis/CMakeLists.txt @@ -41,4 +41,5 @@ foreach(TEST_SRC ${NoMem2regSources}) generate_ll_file(FILE ${TEST_SRC} DEBUG) endforeach(TEST_SRC) +add_subdirectory(double_free) add_subdirectory(dummy_source_sink) diff --git a/test/llvm_test_code/taint_analysis/double_free/CMakeLists.txt b/test/llvm_test_code/taint_analysis/double_free/CMakeLists.txt new file mode 100644 index 0000000000..2207b74b96 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/CMakeLists.txt @@ -0,0 +1,33 @@ +set(NoMem2regSources + df_01.c + df_02.c + df_03.c + df_04_1.c + df_04.c + df_05.c + df_06.c + df_07_1.c + df_07.c + df_08.c + df_09.c + df_10.c + df_11.c + df_12.c + df_13.c + df_14.c + df_15.c + df_16.c + df_17.c + df_18.c + df_19.c + df_20.c + df_21.c + df_22.c + df_ctx_01.c + df_ctx_02.c + df_ctx_03.c +) + +foreach(TEST_SRC ${NoMem2regSources}) + generate_ll_file(FILE ${TEST_SRC} DEBUG) +endforeach(TEST_SRC) diff --git a/test/llvm_test_code/taint_analysis/double_free/df_01.c b/test/llvm_test_code/taint_analysis/double_free/df_01.c new file mode 100644 index 0000000000..bd7a1bd273 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_01.c @@ -0,0 +1,22 @@ +#include +int main() { + int *foo = (int *)malloc(32); + free(foo); + free(foo); // vulnerability + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_01_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_01.c:5:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_01_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_01.c:5:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_01_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_01.c:5:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_01_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_01.c:5:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_01_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_01.c:5:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_02.c b/test/llvm_test_code/taint_analysis/double_free/df_02.c new file mode 100644 index 0000000000..97cd93b777 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_02.c @@ -0,0 +1,25 @@ +#include +void v() { + int *foo = (int *)malloc(32); + free(foo); + free(foo); // vulnerability +} +int main() { + v(); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_02_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_02.c:5:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_02_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_02.c:5:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_02_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_02.c:5:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_02_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_02.c:5:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_02_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_02.c:5:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_03.c b/test/llvm_test_code/taint_analysis/double_free/df_03.c new file mode 100644 index 0000000000..7bd45ff87c --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_03.c @@ -0,0 +1,25 @@ +#include +void v(int *foo) { + free(foo); + free(foo); // vulnerability +} +int main() { + int *foo = (int *)malloc(32); + v(foo); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_03_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_03.c:4:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_03_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_03.c:4:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_03_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_03.c:4:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_03_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_03.c:4:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_03_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_03.c:4:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_04.c b/test/llvm_test_code/taint_analysis/double_free/df_04.c new file mode 100644 index 0000000000..28bc192b0b --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_04.c @@ -0,0 +1,25 @@ +#include +void v(int *foo) { + free(foo); // vulnerability +} +int main() { + int *foo = (int *)malloc(32); + free(foo); + v(foo); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_04_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_04.c:3:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_04_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_04.c:3:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_04_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_04.c:3:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_04_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// monoifds-taint: /taint_analysis/double_free/df_04.c:3:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_04_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_04.c:3:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_04_1.c b/test/llvm_test_code/taint_analysis/double_free/df_04_1.c new file mode 100644 index 0000000000..1cd9a7aa94 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_04_1.c @@ -0,0 +1,26 @@ +#include +void v(int *foo) { + free(&foo); // no vulnerability + free(foo); // vulnerability +} +int main() { + int *foo = (int *)malloc(32); + free(foo); + v(foo); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_04_1_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_04_1.c:4:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_04_1_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_04_1.c:4:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_04_1_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_04_1.c:4:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_04_1_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_04_1.c:4:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_04_1_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_04_1.c:4:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_05.c b/test/llvm_test_code/taint_analysis/double_free/df_05.c new file mode 100644 index 0000000000..f2cbb308fc --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_05.c @@ -0,0 +1,26 @@ +#include +void v(int *foo) { + free(foo); // vulnerability +} +void f(int *foo) { v(foo); } +int main() { + int *foo = (int *)malloc(32); + free(foo); + f(foo); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_05_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_05.c:3:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_05_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_05.c:3:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_05_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_05.c:3:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_05_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_05.c:3:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_05_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_05.c:3:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_06.c b/test/llvm_test_code/taint_analysis/double_free/df_06.c new file mode 100644 index 0000000000..245c3411f6 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_06.c @@ -0,0 +1,38 @@ + +/// TODO: Fields + +#include + +typedef struct _S { + int *X; + int *Y; +} S; + +void v(S *foo) { + free(foo->Y); // foo->X is free'd, but foo->Y is not, so this is fine +} +void f(S *foo) { v(foo); } +int main() { + S foo = {}; + foo.X = (int *)malloc(32); + foo.Y = (int *)malloc(32); + + free(foo.X); + f(&foo); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_06_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_06_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_06.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_06_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_06.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_06_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_06.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_06_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_06.c:12:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_07.c b/test/llvm_test_code/taint_analysis/double_free/df_07.c new file mode 100644 index 0000000000..5d83a2d680 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_07.c @@ -0,0 +1,38 @@ + +/// TODO: Fields + +#include + +typedef struct _S { + int *X; + int *Y; +} S; + +void v(S *foo) { // + free(foo->Y); +} +void f(S *foo) { v(foo); } +int main() { + S foo = {}; + foo.X = (int *)malloc(32); + foo.Y = (int *)malloc(32); + + free(foo.Y); + f(&foo); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_07_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_07.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_07_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_07.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_07_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_07.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_07_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// monoifds-taint: /taint_analysis/double_free/df_07.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_07_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_07.c:12:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_07_1.c b/test/llvm_test_code/taint_analysis/double_free/df_07_1.c new file mode 100644 index 0000000000..9e8e3fea78 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_07_1.c @@ -0,0 +1,34 @@ +#include + +typedef struct _S { + int *XY[2]; +} S; + +void v(int **foo) { // + free(foo[-1]); +} +void f(int **foo) { v(foo); } +int main() { + S foo = {}; + foo.XY[0] = (int *)malloc(32); + foo.XY[1] = (int *)malloc(32); + + free(foo.XY[0]); + f(&foo.XY[1]); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_07_1_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_07_1_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_07_1.c:8:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_07_1_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_07_1.c:8:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_07_1_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_07_1.c:8:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_07_1_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_07_1.c:8:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_08.c b/test/llvm_test_code/taint_analysis/double_free/df_08.c new file mode 100644 index 0000000000..ef7d01790d --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_08.c @@ -0,0 +1,24 @@ +#include + +int main() { + int *foo = (int *)malloc(32); + free(foo); + if (rand()) + free(foo); // vulnerability + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_08_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_08.c:7:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_08_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_08.c:7:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_08_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_08.c:7:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_08_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_08.c:7:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_08_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_08.c:7:5: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_09.c b/test/llvm_test_code/taint_analysis/double_free/df_09.c new file mode 100644 index 0000000000..9aa23ace72 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_09.c @@ -0,0 +1,25 @@ +#include + +int main() { + int *foo = (int *)malloc(32); + if (rand()) + free(foo); + + free(foo); // vulnerability + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_09_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_09.c:8:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_09_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_09.c:8:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_09_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_09.c:8:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_09_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_09.c:8:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_09_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_09.c:8:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_10.c b/test/llvm_test_code/taint_analysis/double_free/df_10.c new file mode 100644 index 0000000000..d8c7c84977 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_10.c @@ -0,0 +1,29 @@ +#include + +int main() { + int *foo = (int *)malloc(32); + int *bar = (int *)malloc(32); + + free(bar); + + if (rand()) + foo = bar; + + free(foo); // vulnerability + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_10_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_10.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_10_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_10.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_10_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_10.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_10_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_10.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_10_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_10.c:12:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_11.c b/test/llvm_test_code/taint_analysis/double_free/df_11.c new file mode 100644 index 0000000000..b103b5ca24 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_11.c @@ -0,0 +1,28 @@ +#include + +int *g; + +void v(void) { free(g); } + +int main() { + g = (int *)malloc(32); + + free(g); + v(); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_11_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_11.c:5:16: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_11_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_11.c:5:16: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_11_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_11.c:5:16: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_11_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_11.c:5:16: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_11_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_11.c:5:16: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_12.c b/test/llvm_test_code/taint_analysis/double_free/df_12.c new file mode 100644 index 0000000000..ddc8f8b3f3 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_12.c @@ -0,0 +1,32 @@ +#include + +int *g; + +void v(void) { free(g); } + +int main() { + int *x = (int *)malloc(32); + + if (rand()) { + g = x; + } + + free(x); + v(); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_12_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_12_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_12.c:5:16: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_12_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_12.c:5:16: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_12_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_12.c:5:16: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_12_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_12.c:5:16: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_13.c b/test/llvm_test_code/taint_analysis/double_free/df_13.c new file mode 100644 index 0000000000..87e61382b9 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_13.c @@ -0,0 +1,29 @@ +#include + +int main() { + int *Arr[] = { + (int *)malloc(4), + (int *)malloc(4), + }; + + for (int i = 0; i < 2; ++i) { + free(Arr[i]); // no vulnerability -- fp + } + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_13_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_13.c:10:5 + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_13_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_13_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_13_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_13.c:10:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_13_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: No leaks found! diff --git a/test/llvm_test_code/taint_analysis/double_free/df_14.c b/test/llvm_test_code/taint_analysis/double_free/df_14.c new file mode 100644 index 0000000000..34fb2ce2a0 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_14.c @@ -0,0 +1,29 @@ +#include + +int main() { + int *Arr[] = { + (int *)malloc(4), + (int *)malloc(4), + }; + + for (int **it = Arr, **end = it + 2; it != end; ++it) { + free(*it); // no vulnerability -- fp + } + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_14_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_14_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_14_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_14_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_14.c:10:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_14_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: No leaks found! diff --git a/test/llvm_test_code/taint_analysis/double_free/df_15.c b/test/llvm_test_code/taint_analysis/double_free/df_15.c new file mode 100644 index 0000000000..0ed723c747 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_15.c @@ -0,0 +1,26 @@ +#include + +int main() { + + for (int i = 0; i < 10; ++i) { + void *p = malloc(4); + free(p); // no leak + } + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_15_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_15_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_15.c:7:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_15_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_15.c:7:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_15_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_15.c:7:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_15_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_15.c:7:5: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_16.c b/test/llvm_test_code/taint_analysis/double_free/df_16.c new file mode 100644 index 0000000000..1bd1387bb7 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_16.c @@ -0,0 +1,30 @@ +#include + +void *alloc() { // + return malloc(4); +} + +int main() { + + for (int i = 0; i < 10; ++i) { + void *p = alloc(); + free(p); + } + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_16_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_16_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_16.c:11:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_16_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_16.c:11:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_16_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_16.c:11:5: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_16_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_16.c:11:5: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_17.c b/test/llvm_test_code/taint_analysis/double_free/df_17.c new file mode 100644 index 0000000000..346239c973 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_17.c @@ -0,0 +1,29 @@ +#include + +void *alloc() { // + return malloc(4); +} + +int main() { + void *p1 = alloc(); + void *p2 = alloc(); + + free(p1); + free(p2); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_17_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_17_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_17_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_17_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_17.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_17_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: No leaks found! diff --git a/test/llvm_test_code/taint_analysis/double_free/df_18.c b/test/llvm_test_code/taint_analysis/double_free/df_18.c new file mode 100644 index 0000000000..a89776ea42 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_18.c @@ -0,0 +1,29 @@ +#include + +void *alloc() { // + return malloc(4); +} + +int main() { + void *p = alloc(); + free(p); + p = alloc(); + free(p); + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_18_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_18_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_18_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_18_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_18.c:11:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_18_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: No leaks found! diff --git a/test/llvm_test_code/taint_analysis/double_free/df_19.c b/test/llvm_test_code/taint_analysis/double_free/df_19.c new file mode 100644 index 0000000000..7552764d5f --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_19.c @@ -0,0 +1,29 @@ +#include + +void **alloc() { // + return (void **)malloc(sizeof(void *)); +} + +int main() { + void **p = alloc(); + *p = malloc(4); + free(*p); + free(*p); + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_19_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_19.c:11:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_19_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_19_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_19_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_19.c:11:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_19_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: No leaks found! diff --git a/test/llvm_test_code/taint_analysis/double_free/df_20.c b/test/llvm_test_code/taint_analysis/double_free/df_20.c new file mode 100644 index 0000000000..151aef63c6 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_20.c @@ -0,0 +1,31 @@ +#include + +void **alloc() { // + return (void **)malloc(sizeof(void *)); +} + +int main() { + void **p = alloc(); + *p = malloc(4); + free(*p); + *p = malloc(4); + free(*p); + free(p); + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_20_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_20.c:13:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_20_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_20.c:12:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_20_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_20.c:13:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_20_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_20.c:13:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_20_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_20.c:13:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_21.c b/test/llvm_test_code/taint_analysis/double_free/df_21.c new file mode 100644 index 0000000000..8dbba9a7f8 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_21.c @@ -0,0 +1,44 @@ +#include +// void v(int **foo) { +// free(*foo); // vulnerability +// } + +// void v(void *dataVoidPtr) { +// /* cast void pointer to a pointer of the appropriate type */ +// char **dataPtr = (char **)dataVoidPtr; +// /* dereference dataPtr into data */ +// char *data = (*dataPtr); +// /* POTENTIAL FLAW: Possibly freeing memory twice */ +// free(data); +// } + +void v(void **dataVoidPtr) { + /* cast void pointer to a pointer of the appropriate type */ + // char **dataPtr = (char **)dataVoidPtr; + /* dereference dataPtr into data */ + // void *data = (*dataVoidPtr); + /* POTENTIAL FLAW: Possibly freeing memory twice */ + free(*dataVoidPtr); +} + +int main() { + int *foo = (int *)malloc(32); + free(foo); + v(&foo); + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_21_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_21.c:21:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_21_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_21.c:21:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_21_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_21.c:21:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_21_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_21_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_21.c:21:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_22.c b/test/llvm_test_code/taint_analysis/double_free/df_22.c new file mode 100644 index 0000000000..b14510a20f --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_22.c @@ -0,0 +1,32 @@ +#include + +int *v(int *p) { return p; } + +int main() { + int *foo = (int *)malloc(32); + free(foo); + int *x = v(foo); + + int a = 42; + int *y = v(&a); + + free(x); + free(y); + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_22_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_22.c:13:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_22_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_22.c:13:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_22_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_22.c:13:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_22_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_22.c:13:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_22_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_22.c:13:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_ctx_01.c b/test/llvm_test_code/taint_analysis/double_free/df_ctx_01.c new file mode 100644 index 0000000000..58a1effbe9 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_ctx_01.c @@ -0,0 +1,28 @@ +#include + +int *rec(int *p, int n) { return n > 0 ? rec(p, n - 1) : p; } + +int main() { + int *foo = (int *)malloc(32); + free(foo); + + int *x = rec(foo, 3); + free(x); + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_01_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_ctx_01.c:10:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_01_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_01_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_01_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_ctx_01.c:10:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_01_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: No leaks found! diff --git a/test/llvm_test_code/taint_analysis/double_free/df_ctx_02.c b/test/llvm_test_code/taint_analysis/double_free/df_ctx_02.c new file mode 100644 index 0000000000..ea2c8b8ab7 --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_ctx_02.c @@ -0,0 +1,35 @@ +#include + +int *id(int *p) { return p; } + +int main() { + int *foo = (int *)malloc(32); + int *bar = (int *)malloc(32); + free(foo); + free(bar); + + int *x = id(foo); + int *y = id(bar); + + free(x); + free(y); + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_02_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_ctx_02.c:14:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_02_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_ctx_02.c:14:3: +// ifds-taint: /taint_analysis/double_free/df_ctx_02.c:15:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_02_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_ctx_02.c:14:3: +// ifds-fieldsens-taint: /taint_analysis/double_free/df_ctx_02.c:15:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_02_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_ctx_02.c:14:3: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_02_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_ctx_02.c:14:3: diff --git a/test/llvm_test_code/taint_analysis/double_free/df_ctx_03.c b/test/llvm_test_code/taint_analysis/double_free/df_ctx_03.c new file mode 100644 index 0000000000..4980fb000e --- /dev/null +++ b/test/llvm_test_code/taint_analysis/double_free/df_ctx_03.c @@ -0,0 +1,27 @@ +#include + +void inner(int *p) { free(p); } +void outer(int *p) { inner(p); } + +int main() { + int *foo = (int *)malloc(32); + free(foo); + outer(foo); + + return 0; +} + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ide-xtaint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_03_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free/df_ctx_03.c:3:22: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_03_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free/df_ctx_03.c:3:22: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_03_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free/df_ctx_03.c:3:22: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=monoifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_03_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /taint_analysis/double_free/df_ctx_03.c:3:22: + +// RUN: %S/../../../../build/tools/phasar-cli/phasar-cli --data-flow-analysis=sparse-ifds-taint --module %S/../../../../build/test/llvm_test_code/taint_analysis/double_free/df_ctx_03_c_dbg.ll --analysis-config %S/../../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /taint_analysis/double_free/df_ctx_03.c:3:22: diff --git a/test/llvm_test_code/taint_analysis/double_free_01.c b/test/llvm_test_code/taint_analysis/double_free_01.c index 9ef43c7dbc..7138717bbb 100644 --- a/test/llvm_test_code/taint_analysis/double_free_01.c +++ b/test/llvm_test_code/taint_analysis/double_free_01.c @@ -5,3 +5,18 @@ int main() { free(X); free(X); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/taint_analysis/double_free_01_c_dbg.ll --analysis-config %S/../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: /taint_analysis/double_free_01.c:6:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/taint_analysis/double_free_01_c_dbg.ll --analysis-config %S/../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free_01.c:6:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/taint_analysis/double_free_01_c_dbg.ll --analysis-config %S/../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free_01.c:6:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/taint_analysis/double_free_01_c_dbg.ll --analysis-config %S/../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: A LLVM-based static analysis framework + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/taint_analysis/double_free_01_c_dbg.ll --analysis-config %S/../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: A LLVM-based static analysis framework diff --git a/test/llvm_test_code/taint_analysis/double_free_02.c b/test/llvm_test_code/taint_analysis/double_free_02.c index 73d1d06acf..f705974307 100644 --- a/test/llvm_test_code/taint_analysis/double_free_02.c +++ b/test/llvm_test_code/taint_analysis/double_free_02.c @@ -7,3 +7,18 @@ int main() { doFree(X); free(X); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/taint_analysis/double_free_02_c_dbg.ll --analysis-config %S/../../../config/double-free-config.json | FileCheck %s -check-prefix=xtaint +// xtaint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/taint_analysis/double_free_02_c_dbg.ll --analysis-config %S/../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /taint_analysis/double_free_02.c:8:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/taint_analysis/double_free_02_c_dbg.ll --analysis-config %S/../../../config/double-free-config.json | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /taint_analysis/double_free_02.c:8:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/taint_analysis/double_free_02_c_dbg.ll --analysis-config %S/../../../config/double-free-config.json | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: A LLVM-based static analysis framework + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/taint_analysis/double_free_02_c_dbg.ll --analysis-config %S/../../../config/double-free-config.json | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: A LLVM-based static analysis framework diff --git a/test/llvm_test_code/xtaint/CMakeLists.txt b/test/llvm_test_code/xtaint/CMakeLists.txt index c5ff825eb3..6cf0304842 100644 --- a/test/llvm_test_code/xtaint/CMakeLists.txt +++ b/test/llvm_test_code/xtaint/CMakeLists.txt @@ -8,11 +8,10 @@ set(XTAINT_DBG_SOURCES xtaint04.cpp xtaint05.cpp xtaint06.cpp - # xtaint07.cpp # xtaint08.cpp - xtaint09.cpp xtaint09_1.cpp + xtaint09.cpp xtaint10.cpp xtaint11.cpp xtaint12.cpp diff --git a/test/llvm_test_code/xtaint/xtaint01.cpp b/test/llvm_test_code/xtaint/xtaint01.cpp index 5a8bef5102..c15b352dd0 100644 --- a/test/llvm_test_code/xtaint/xtaint01.cpp +++ b/test/llvm_test_code/xtaint/xtaint01.cpp @@ -7,3 +7,18 @@ void print([[clang::annotate("psr.sink")]] int) { int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { print(argc); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint01_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint01.cpp:8:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint01_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint01.cpp:8:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint01_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint01.cpp:8:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint01_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint01_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint01.cpp:8:3: diff --git a/test/llvm_test_code/xtaint/xtaint02.cpp b/test/llvm_test_code/xtaint/xtaint02.cpp index 3c066d68f8..88b243594a 100644 --- a/test/llvm_test_code/xtaint/xtaint02.cpp +++ b/test/llvm_test_code/xtaint/xtaint02.cpp @@ -9,3 +9,19 @@ int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { print(array[0]); print(array[1]); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint02_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint02.cpp:9:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint02_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint02.cpp:9:3: +// ifds-taint: /xtaint/xtaint02.cpp:10:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint02_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint02.cpp:9:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint02_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint02_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint02.cpp:9:3: diff --git a/test/llvm_test_code/xtaint/xtaint03.cpp b/test/llvm_test_code/xtaint/xtaint03.cpp index f6268ead28..ec88f27294 100644 --- a/test/llvm_test_code/xtaint/xtaint03.cpp +++ b/test/llvm_test_code/xtaint/xtaint03.cpp @@ -9,3 +9,19 @@ int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { print(array[0]); print(array[1]); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint03_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint03.cpp:10:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint03_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint03.cpp:9:3: +// ifds-taint: /xtaint/xtaint03.cpp:10:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint03_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint03.cpp:10:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint03_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint03_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint03.cpp:10:3: diff --git a/test/llvm_test_code/xtaint/xtaint04.cpp b/test/llvm_test_code/xtaint/xtaint04.cpp index f5950edca8..00ab0c82bd 100644 --- a/test/llvm_test_code/xtaint/xtaint04.cpp +++ b/test/llvm_test_code/xtaint/xtaint04.cpp @@ -15,3 +15,19 @@ void foo(int x) { int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { foo(argc); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint04_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint04.cpp:6:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint04_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint04.cpp:5:3: +// ifds-taint: /xtaint/xtaint04.cpp:6:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint04_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint04.cpp:6:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint04_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint04_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint04.cpp:6:3: diff --git a/test/llvm_test_code/xtaint/xtaint05.cpp b/test/llvm_test_code/xtaint/xtaint05.cpp index ede433ce6b..d63d883195 100644 --- a/test/llvm_test_code/xtaint/xtaint05.cpp +++ b/test/llvm_test_code/xtaint/xtaint05.cpp @@ -17,3 +17,18 @@ void foo(int x) { int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { foo(argc); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint05_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint05.cpp:14:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint05_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint05.cpp:14:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint05_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint05_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint05_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint05.cpp:14:3: diff --git a/test/llvm_test_code/xtaint/xtaint06.cpp b/test/llvm_test_code/xtaint/xtaint06.cpp index 0a1c861a60..d05c969c05 100644 --- a/test/llvm_test_code/xtaint/xtaint06.cpp +++ b/test/llvm_test_code/xtaint/xtaint06.cpp @@ -17,3 +17,18 @@ void foo(int x) { int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { foo(argc); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint06_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint06_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint06.cpp:14:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint06_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint06_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint06_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint06.cpp:14:3: diff --git a/test/llvm_test_code/xtaint/xtaint09.cpp b/test/llvm_test_code/xtaint/xtaint09.cpp index 484b3c8b5a..cced9479fa 100644 --- a/test/llvm_test_code/xtaint/xtaint09.cpp +++ b/test/llvm_test_code/xtaint/xtaint09.cpp @@ -15,3 +15,18 @@ int main() { sink(*mem); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint09_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint09.cpp:16:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint09_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint09.cpp:16:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint09_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint09.cpp:16:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint09_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /xtaint/xtaint09.cpp:16:3: + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint09_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint09.cpp:16:3: diff --git a/test/llvm_test_code/xtaint/xtaint09_1.cpp b/test/llvm_test_code/xtaint/xtaint09_1.cpp index 3fba6634bd..5ede4c10ce 100644 --- a/test/llvm_test_code/xtaint/xtaint09_1.cpp +++ b/test/llvm_test_code/xtaint/xtaint09_1.cpp @@ -15,3 +15,18 @@ int main() { free(mem); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint09_1_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint09_1.cpp:14:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint09_1_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint09_1.cpp:14:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint09_1_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint09_1.cpp:14:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint09_1_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /xtaint/xtaint09_1.cpp:14:3: + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint09_1_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint09_1.cpp:14:3: diff --git a/test/llvm_test_code/xtaint/xtaint10.cpp b/test/llvm_test_code/xtaint/xtaint10.cpp index 649f08095c..143f910f21 100644 --- a/test/llvm_test_code/xtaint/xtaint10.cpp +++ b/test/llvm_test_code/xtaint/xtaint10.cpp @@ -23,3 +23,23 @@ int main() { sink(mem->x); sink(mem->y); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint10_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint10.cpp:23:3: +// ide-xtaint: /xtaint/xtaint10.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint10_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint10.cpp:23:3: +// ifds-taint: /xtaint/xtaint10.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint10_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint10.cpp:23:3: +// ifds-fieldsens-taint: /xtaint/xtaint10.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint10_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /xtaint/xtaint10.cpp:23:3: +// monoifds-taint: /xtaint/xtaint10.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint10_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint10.cpp:23:3: +// sparse-ifds-taint: /xtaint/xtaint10.cpp:24:3: diff --git a/test/llvm_test_code/xtaint/xtaint11.cpp b/test/llvm_test_code/xtaint/xtaint11.cpp index 0c783460eb..037c60853c 100644 --- a/test/llvm_test_code/xtaint/xtaint11.cpp +++ b/test/llvm_test_code/xtaint/xtaint11.cpp @@ -23,3 +23,23 @@ int main() { sink(mem->x); sink(mem->y); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint11_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint11.cpp:23:3: +// ide-xtaint: /xtaint/xtaint11.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint11_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint11.cpp:23:3: +// ifds-taint: /xtaint/xtaint11.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint11_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint11.cpp:23:3: +// ifds-fieldsens-taint: /xtaint/xtaint11.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint11_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /xtaint/xtaint11.cpp:23:3: +// monoifds-taint: /xtaint/xtaint11.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint11_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint11.cpp:23:3: +// sparse-ifds-taint: /xtaint/xtaint11.cpp:24:3: diff --git a/test/llvm_test_code/xtaint/xtaint12.cpp b/test/llvm_test_code/xtaint/xtaint12.cpp index e63707e484..4b9c06609b 100644 --- a/test/llvm_test_code/xtaint/xtaint12.cpp +++ b/test/llvm_test_code/xtaint/xtaint12.cpp @@ -18,3 +18,18 @@ int main() { sink(*getPtr(&ptaint)); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint12_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint12.cpp:19:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint12_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint12.cpp:19:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint12_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint12.cpp:19:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint12_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /xtaint/xtaint12.cpp:19:3: + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint12_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint12.cpp:19:3: diff --git a/test/llvm_test_code/xtaint/xtaint13.cpp b/test/llvm_test_code/xtaint/xtaint13.cpp index a6af82380d..809f6917ac 100644 --- a/test/llvm_test_code/xtaint/xtaint13.cpp +++ b/test/llvm_test_code/xtaint/xtaint13.cpp @@ -16,3 +16,19 @@ int main() { sink(dip.i); sink(x); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint13_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint13.cpp:17:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint13_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint13.cpp:16:3: +// ifds-taint: /xtaint/xtaint13.cpp:17:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint13_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint13.cpp:17:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint13_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /xtaint/xtaint13.cpp:17:3 + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint13_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint13.cpp:17:3 diff --git a/test/llvm_test_code/xtaint/xtaint14.cpp b/test/llvm_test_code/xtaint/xtaint14.cpp index c017a63520..0650609e4c 100644 --- a/test/llvm_test_code/xtaint/xtaint14.cpp +++ b/test/llvm_test_code/xtaint/xtaint14.cpp @@ -25,3 +25,19 @@ int main() { disposeSource(src); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint14_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint14.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint14_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint14.cpp:23:3: +// ifds-taint: /xtaint/xtaint14.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint14_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint14.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint14_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /xtaint/xtaint14.cpp:24:3: + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint14_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint14.cpp:24:3: diff --git a/test/llvm_test_code/xtaint/xtaint15.cpp b/test/llvm_test_code/xtaint/xtaint15.cpp index 2c4649609c..a86eee666e 100644 --- a/test/llvm_test_code/xtaint/xtaint15.cpp +++ b/test/llvm_test_code/xtaint/xtaint15.cpp @@ -25,3 +25,18 @@ int main() { disposeSource(src); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint15_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint15_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint15_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint15_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint15_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: No leaks found! diff --git a/test/llvm_test_code/xtaint/xtaint16.cpp b/test/llvm_test_code/xtaint/xtaint16.cpp index 0a46236393..68ecd500bf 100644 --- a/test/llvm_test_code/xtaint/xtaint16.cpp +++ b/test/llvm_test_code/xtaint/xtaint16.cpp @@ -12,3 +12,18 @@ int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { // we can skip the sanitizer => leak here sink(x); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint16_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint16.cpp:13:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint16_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint16.cpp:13:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint16_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint16.cpp:13:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint16_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint16_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint16.cpp:13:3: diff --git a/test/llvm_test_code/xtaint/xtaint17.cpp b/test/llvm_test_code/xtaint/xtaint17.cpp index 29e4e1bb5b..66f1f0cb24 100644 --- a/test/llvm_test_code/xtaint/xtaint17.cpp +++ b/test/llvm_test_code/xtaint/xtaint17.cpp @@ -16,3 +16,18 @@ int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { // we can skip the sanitizer => leak here sink(x); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint17_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint17.cpp:17:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint17_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint17.cpp:17:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint17_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint17.cpp:17:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint17_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint17_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint17.cpp:17:3: diff --git a/test/llvm_test_code/xtaint/xtaint18.cpp b/test/llvm_test_code/xtaint/xtaint18.cpp index 2ec0a44dea..143b90ceec 100644 --- a/test/llvm_test_code/xtaint/xtaint18.cpp +++ b/test/llvm_test_code/xtaint/xtaint18.cpp @@ -15,3 +15,18 @@ int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { // here, the sanitizer cannot be skipped... sink(x); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint18_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint18_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint18_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint18_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint18_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: No leaks found! diff --git a/test/llvm_test_code/xtaint/xtaint19.cpp b/test/llvm_test_code/xtaint/xtaint19.cpp index 29e4e1bb5b..0a95c1d5f6 100644 --- a/test/llvm_test_code/xtaint/xtaint19.cpp +++ b/test/llvm_test_code/xtaint/xtaint19.cpp @@ -16,3 +16,18 @@ int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { // we can skip the sanitizer => leak here sink(x); } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint19_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint19.cpp:17:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint19_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint19.cpp:17:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint19_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint19.cpp:17:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint19_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint19_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint19.cpp:17:3: diff --git a/test/llvm_test_code/xtaint/xtaint20.cpp b/test/llvm_test_code/xtaint/xtaint20.cpp index 3c3f486f5f..8c26bc4b2b 100644 --- a/test/llvm_test_code/xtaint/xtaint20.cpp +++ b/test/llvm_test_code/xtaint/xtaint20.cpp @@ -12,3 +12,26 @@ int main(int argc, char *argv[]) { srcsink(x); // leak sink(y); // leak } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint20_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint20.cpp:12:3: +// ide-xtaint: /xtaint/xtaint20.cpp:13:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint20_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint20.cpp:10:3: +// ifds-taint: /xtaint/xtaint20.cpp:12:3: +// ifds-taint: /xtaint/xtaint20.cpp:13:3: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint20_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint20.cpp:10:3: +// ifds-fieldsens-taint: /xtaint/xtaint20.cpp:12:3: +// ifds-fieldsens-taint: /xtaint/xtaint20.cpp:13:3: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint20_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: /xtaint/xtaint20.cpp:12:3: +// monoifds-taint: /xtaint/xtaint20.cpp:13:3: + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint20_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint20.cpp:10:3: +// sparse-ifds-taint: /xtaint/xtaint20.cpp:12:3: +// sparse-ifds-taint: /xtaint/xtaint20.cpp:13:3: diff --git a/test/llvm_test_code/xtaint/xtaint21.cpp b/test/llvm_test_code/xtaint/xtaint21.cpp index 9369648c04..ecc24ce910 100644 --- a/test/llvm_test_code/xtaint/xtaint21.cpp +++ b/test/llvm_test_code/xtaint/xtaint21.cpp @@ -17,3 +17,18 @@ int main(int argc, char *argv[]) { srcsink(x); // leak sink(y); // leak } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint21_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint21_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint21_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint21_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint21_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: No leaks found! diff --git a/test/llvm_test_code/xtaint/xtaint22.cpp b/test/llvm_test_code/xtaint/xtaint22.cpp index 80f4e64721..b7d3d2b4e5 100644 --- a/test/llvm_test_code/xtaint/xtaint22.cpp +++ b/test/llvm_test_code/xtaint/xtaint22.cpp @@ -9,3 +9,18 @@ int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { print(*it); } } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint22_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint22_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint22.cpp:9:5: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint22_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint22.cpp:9:5: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint22_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint22_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint22.cpp:9:5: diff --git a/test/llvm_test_code/xtaint/xtaint23.cpp b/test/llvm_test_code/xtaint/xtaint23.cpp index 62e632b5b9..a7af037b3d 100644 --- a/test/llvm_test_code/xtaint/xtaint23.cpp +++ b/test/llvm_test_code/xtaint/xtaint23.cpp @@ -17,3 +17,18 @@ int main([[clang::annotate("psr.source")]] int argc, char *argv[]) { print(*it.it); } } + +// RUN: %phasar-cli --data-flow-analysis=ide-xtaint --module %llvm_test_code/xtaint/xtaint23_cpp_dbg.ll | FileCheck %s -check-prefix=ide-xtaint +// ide-xtaint: /xtaint/xtaint23.cpp:17:5: + +// RUN: %phasar-cli --data-flow-analysis=ifds-taint --module %llvm_test_code/xtaint/xtaint23_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-taint +// ifds-taint: /xtaint/xtaint23.cpp:17:5: + +// RUN: %phasar-cli --data-flow-analysis=ifds-fieldsens-taint --module %llvm_test_code/xtaint/xtaint23_cpp_dbg.ll | FileCheck %s -check-prefix=ifds-fieldsens-taint +// ifds-fieldsens-taint: /xtaint/xtaint23.cpp:17:5: + +// RUN: %phasar-cli --data-flow-analysis=monoifds-taint --module %llvm_test_code/xtaint/xtaint23_cpp_dbg.ll | FileCheck %s -check-prefix=monoifds-taint +// monoifds-taint: No leaks found! + +// RUN: %phasar-cli --data-flow-analysis=sparse-ifds-taint --module %llvm_test_code/xtaint/xtaint23_cpp_dbg.ll | FileCheck %s -check-prefix=sparse-ifds-taint +// sparse-ifds-taint: /xtaint/xtaint23.cpp:17:5: diff --git a/tools/phasar-cli/Controller/AnalysisControllerXIFDSCFLEnvTaint.cpp b/tools/phasar-cli/Controller/AnalysisControllerXIFDSCFLEnvTaint.cpp index c4ed6a7cf8..d3b25b6333 100644 --- a/tools/phasar-cli/Controller/AnalysisControllerXIFDSCFLEnvTaint.cpp +++ b/tools/phasar-cli/Controller/AnalysisControllerXIFDSCFLEnvTaint.cpp @@ -78,9 +78,6 @@ void controller::executeIFDSCFLEnvTaint(AnalysisController &Data) { }); Printer->onFinalize(OS); - if (!HasResults) { - OS << "No leaks found!\n"; - } }); } diff --git a/utils/install-llvm.sh b/utils/install-llvm.sh index aff717a8b1..c24aafb1e3 100755 --- a/utils/install-llvm.sh +++ b/utils/install-llvm.sh @@ -50,7 +50,7 @@ safe_cd "${build_dir}"/llvm-project/ git checkout "${llvm_release}" mkdir -p build safe_cd build -cmake -G "Ninja" -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi;libunwind' -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;lld;compiler-rt' -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_ENABLE_DUMP=ON -DLLVM_BUILD_EXAMPLES=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_BUILD_TESTS=OFF -DLLVM_INCLUDE_TESTS=OFF ../llvm +cmake -G "Ninja" -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi;libunwind' -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;lld;compiler-rt' -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_ENABLE_DUMP=ON -DLLVM_BUILD_EXAMPLES=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_BUILD_TESTS=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INSTALL_UTILS=ON ../llvm cmake --build . echo "Installing LLVM to ${dest_dir}"